1

Topic: script để edit file với regular express

em có một số file HTML cũ, (khoảng trên dưới 500 file).  Nó bị lỗi Comment như thế này:

<!----------- xxx xxxxx ------------------

Bây giờ em muón cái comment nó thành như vầy:

<!-- xxx xxxxx -->

em dùng kwrite để sửa như vầy thì OK: (dùng chức năng replace)
Bước 1: thêm cho nó cái > vào các chỗ thiếu
replace

--$

bằng

  -->

Bước 2: chèn một hoặc 2 kí tự trắng vào sau 2 dấu trừ của <!--
replace

<!--

bằng

<!--  

Bước 3: thay tất cá các dấu - bị kẹp giữa hai kí tự trắng bằng một chuỗi kí tự trắng.
replace

 -+ 

bằng

  

(Bật regular express lên để có thể gõ regular.)

Bây giờ em muốn làm một script để nó tự động chỉnh hết các file html của em thì phải viết làm sao ? Em là newbie trong vụ regular exp với bash script.

Last edited by phucluoi (25/02/2009 16:51)

2

Re: script để edit file với regular express

Tôi không biết kwrite là cái gì và không quan tâm nó được dùng để làm gì. Nhưng nếu tôi có 1 file (toto.txt):

<!----------- foo1 bar1 ------------------
blah blah 1
<!----------- foo2 bar2 ------------------
blah blah 2
<!----------- foo3 bar4 ------------------
blah blah 3
<!----------- foo4 bar4 ------------------
blah blah 4

Thì sau khi chạy duy nhất 1 dòng lệnh sau, tôi sẽ có output thế này:

$ perl -pe "s/<!\-+\s+(.+)\s+\-+/<!-- $1 -->/g" toto.txt
<!-- foo1 bar1 -->
blah blah 1
<!-- foo2 bar2 -->
blah blah 2
<!-- foo3 bar4 -->
blah blah 3
<!-- foo4 bar4 -->
blah blah 4

lol

"La photographie est une brève complicité entre la prévoyance et le hasard." John Stuart Mill

3

Re: script để edit file với regular express

thanks bác nhiều. Em chép về làm thử. Em đoán bác dùng Fedora với giao diện GNOM.

4

Re: script để edit file với regular express

Code bác xài không được, Nó báo lỗi. Tuy nhiên em cũng đã làm được bằng lệnh

sed -r s/ / /

5

Re: script để edit file với regular express

phucluoi viết:

Em đoán bác dùng Fedora với giao diện GNOM.

Đừng đoán mò, mất công!

phucluoi viết:

Code bác xài không được, Nó báo lỗi.

Lỗi gì ? Tôi chạy vô tư, chả lỗi liếc gì cả.

"La photographie est une brève complicité entre la prévoyance et le hasard." John Stuart Mill

6

Re: script để edit file với regular express

phucluoi viết:

Code bác xài không được, Nó báo lỗi. Tuy nhiên em cũng đã làm được bằng lệnh

sed -r s/ / /

cool  Code này dùng được cho yêu cầu của bạn thì quả là xuất sắc!

Lời nói chẳng mất tiền mua,
Lựa lời mà nói cho vừa lòng nhau.

7

Re: script để edit file với regular express

@Crank Ninja: thế nhỡ viết rõ ra s/foo/bar/ thì có ai đó chôm mất cái regex quí báu đó thì tiếc lắm lol

"La photographie est une brève complicité entre la prévoyance et le hasard." John Stuart Mill

8

Re: script để edit file với regular express

Các bác thông cảm. Em không có mạng ở nhà, ban đêm mới rảnh lò mò ra quan net, nên quên không mang cái code theo, em chả tiếc gì caiđcái code đó đâu. Mai em mang lên cho mà xem.
@ bác phê đô, em nói cái code của bác chạy bị lỗi, chứ có bảo bác lập trình sai đâu. Tại máy em cài perl không đúng, hay hình như perl cũ quá thì phải. em không chắc nữa. Mai em vác cái đống lỗi đó lên cho. Bác đừng mai mỉa em kẹo kéo.
@ bác Ninja yêu cầu của em đơn giản thôi, chả cần phức tạp làm gì, nên mai em mang cái code của em lên bác đừng chê nó vụng, em chỉ là tay ngang thôi.

9

Re: script để edit file với regular express

cú pháp 's/xxx/yyy/g' của perl (@vnpenguin) và sed  (@phucluoi) thì cũng tương tự nhau. Nếu bác *phucluoi* gặp lỗi, thì lỗi gì? Mã của bác *vnpenguin* cho tập tin cụ thể (1 tập tin), còn *phucluoi* có thể dùng sai: trong câu lệnh của *phucluoi* phải dùng đến tùy chọn -r....

Bác *phucluoi* nói rõ ra là gặp lỗi gì, thì sẽ không sinh ra hiểu nhầm đâu tongue

... important note: this isn't my signature ...

10

Re: script để edit file với regular express

Đây là code nguồn, em đã dục bớt mấy phần không liên quan cho nó ngắn lại.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//DE">
<HTML>
<HEAD>
<TITLE>Bang dao ham</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!---------------- info.js ------------------------------------------------
    /*Javascript*/
//-------------------- info.js ------------------------------------------->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!---------------------- newwindow.js ------------------------------------------
    /*javascript*/
//------------------------- neufenst.js -------------------------------------->
</SCRIPT>
<META NAME="description" CONTENT="Ungleichungen f&#252;r den Absolutbetrag der Differenz zweier Zahlen">
<LINK REL="STYLESHEET" HREF="../sonder/bron.css">
<LINK REL="next" HREF="node101.htm">
<LINK REL="previous" HREF="node99.htm">
<LINK REL="up" HREF="node98.htm">
<LINK REL="next" HREF="node101.htm">
</HEAD>
<BODY BGCOLOR = "#f7ffef"  LINK="#1320a5" VLINK="#633586" TEXT="#000000"  onload="if (Suchen) window.find(location.search.substring(1)); window.defaultStatus='DesTop Bronstein';">
<!-- ------------------------------ -->
<!-- ----- Begin Page: header ------------------------ -->
    <H1>Here is place for Header</H1>
<!-- ----- End header ------------------------------------- -->
    <H2>Main Inhalt here</H2>
<!-- ----- Start Footnote --------------- -->
    <H2>Footnote here</H2>
<!-- ----- End Footnote --------------- -->
</BODY>
</HTML>

còn cái này là code của em:

#! /bin/bash
for i in $*
do
    if [ ! -d "$i" ]; then
        echo "Processing $i"
        cp $i "$i.bak"
        sed  -r s/' ''-'+' '/' '/ < $i.bak |
        sed  -r s/'<!-- '/'<!-- '/ | 
        sed  -r s/' ''-'+' '/' '/ |
        sed  -r s/'js ''-'+/'js -->''>'/ |
        cat > $i
    fi
done

rm -f *~
rm -f *.bak

chạy xong nó ra như dzầy

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//DE">
<HTML>
<HEAD>
<TITLE>Bang dao ham</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!---------------- info.js -->>
    /*Javascript*/
//-------------------- info.js -->>>
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!---------------------- newwindow.js -->>
    /*javascript*/
//------------------------- neufenst.js -->>>
</SCRIPT>
<META NAME="description" CONTENT="Ungleichungen f&#252;r den Absolutbetrag der Differenz zweier Zahlen">
<LINK REL="STYLESHEET" HREF="../sonder/bron.css">
<LINK REL="next" HREF="node101.htm">
<LINK REL="previous" HREF="node99.htm">
<LINK REL="up" HREF="node98.htm">
<LINK REL="next" HREF="node101.htm">
</HEAD>
<BODY BGCOLOR = "#f7ffef"  LINK="#1320a5" VLINK="#633586" TEXT="#000000"  onload="if (Suchen) window.find(location.search.substring(1)); window.defaultStatus='DesTop Bronstein';">
<!-- -->
<!-- Begin Page: header -->
    <H1>Here is place for Header</H1>
<!-- End header -->
    <H2>Main Inhalt here</H2>
<!-- Start Footnote -->
    <H2>Footnote here</H2>
<!-- End Footnote -->
</BODY>
</HTML>

Tuy là không đúng chuẩn W3C nhưng mà firefox coi được là OK rùi.
còn khi chạy code của bác thì nó ra như dzầy

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//DE">
<HTML>
<HEAD>
<TITLE>Bang dao ham</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--  -->>>
        /*Javascript*/
//-------------------- info.js -->>>
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!--  -->>>
        /*javascript*/
//------------------------- neufenst.js -->>>
</SCRIPT>
<META NAME="description" CONTENT="Ungleichungen f&#252;r den Absolutbetrag der Differenz zweier Zahlen">
<LINK REL="STYLESHEET" HREF="../sonder/bron.css">
<LINK REL="next" HREF="node101.htm">
<LINK REL="previous" HREF="node99.htm">
<LINK REL="up" HREF="node98.htm">
<LINK REL="next" HREF="node101.htm">
</HEAD>
<BODY BGCOLOR = "#f7ffef"  LINK="#1320a5" VLINK="#633586" TEXT="#000000"  onload="if (Suchen) window.find(location.search.substring(1)); window.defaultStatus='DesTop Bronstein';">
<!-- -->
<!--  -->>
        <H1>Here is place for Header</H1>
<!--  -->>
        <H2>Main Inhalt here</H2>
<!--  -->>
        <H2>Footnote here</H2>
<!--  -->>
</BODY>
</HTML>

Coi cũng được luôn, chỉ có dư thêm mấy cái dấu ">" thôi. Lỗi là do em khi mô tả cái file đã không mô tả chính xác.
Mấy bác ở đây tốt bungtụng thật, nhưng mà hay nhạy cảm quá. Nhiều khi em muốn viết mà cũng ngại, tại emlaf dân 8x, ăn nói có phần không được quy củ lắm.
@ bác phê đô. Bác chơi cái biểu tượng phê đô to tướng, mà bác bảo bác không xài gnome, cũng không biết kwrite là cái gì luôn, thì em đoán bác đích thị là siêu Unixer rồi, suốt ngày ôm cái màn hình đen thui thùi lùi với cái console thôi, cần viết code thì xài vi chứ chắc cũng hông thèm xài vim luôn. Đoán chơi vậy thôi, nếu bác không thích thì em sẽ xoá phần này đi.

Last edited by phucluoi (05/03/2009 17:39)

11

Re: script để edit file với regular express

smile viết thử cái:

#!/bin/bash
for i in *html
do 
    cat $i | sed -e 's/--$/-->/g' > $i.mod
done

với :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//DE">
<HTML>
<HEAD>
<TITLE>Bang dao ham</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!---------------- info.js ------------------------------------------------
    /*Javascript*/
//-------------------- info.js ------------------------------------------->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!---------------------- newwindow.js ------------------------------------------
    /*javascript*/
//------------------------- neufenst.js -------------------------------------->
</SCRIPT>
<META NAME="description" CONTENT="Ungleichungen f&#252;r den Absolutbetrag der Differenz zweier Zahlen">
<LINK REL="STYLESHEET" HREF="../sonder/bron.css">
<LINK REL="next" HREF="node101.htm">
<LINK REL="previous" HREF="node99.htm">
<LINK REL="up" HREF="node98.htm">
<LINK REL="next" HREF="node101.htm">
</HEAD>
<BODY BGCOLOR = "#f7ffef"  LINK="#1320a5" VLINK="#633586" TEXT="#000000"  onload="if (Suchen) window.find(location.search.substring(1)); window.defaultStatus='DesTop Bronstein';">
<!-- ------------------------------ -->
<!-- ----- Begin Page: header ------------------------ -->
    <H1>Here is place for Header</H1>
<!-- ----- End header ------------------------------------- -->
    <H2>Main Inhalt here</H2>
<!-- ----- Start Footnote --------------- -->
    <H2>Footnote here</H2>
<!-- ----- End Footnote --------------- -->
</BODY>
</HTML>

tớ có :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//DE">
<HTML>
<HEAD>
<TITLE>Bang dao ham</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!---------------- info.js ----------------------------------------------->
    /*Javascript*/
//-------------------- info.js ------------------------------------------->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!---------------------- newwindow.js ----------------------------------------->
    /*javascript*/
//------------------------- neufenst.js -------------------------------------->
</SCRIPT>
<META NAME="description" CONTENT="Ungleichungen f&#252;r den Absolutbetrag der Differenz zweier Zahlen">
<LINK REL="STYLESHEET" HREF="../sonder/bron.css">
<LINK REL="next" HREF="node101.htm">
<LINK REL="previous" HREF="node99.htm">
<LINK REL="up" HREF="node98.htm">
<LINK REL="next" HREF="node101.htm">
</HEAD>
<BODY BGCOLOR = "#f7ffef"  LINK="#1320a5" VLINK="#633586" TEXT="#000000"  onload="if (Suchen) window.find(location.search.substring(1)); window.defaultStatus='DesTop Bronstein';">
<!-- ------------------------------ -->
<!-- ----- Begin Page: header ------------------------ -->
    <H1>Here is place for Header</H1>
<!-- ----- End header ------------------------------------- -->
    <H2>Main Inhalt here</H2>
<!-- ----- Start Footnote --------------- -->
    <H2>Footnote here</H2>
<!-- ----- End Footnote --------------- -->
</BODY>
</HTML>

12

Re: script để edit file với regular express

Em đã thử kết quả của bác tuấn, FF không hiện đúng như mong đợi.

13

Re: script để edit file với regular express

Vọc qua cái này cho nó chuyện cbn nghiệp: http://tidy.sourceforge.net/

14

Re: script để edit file với regular express

Hic, mấy hôm rồi bựn quá, giờ mới giả nhời được. Tớ mới viết lại chút:

#!/bin/sh
cat $1 | sed -e 's/ --\+-- //g' \
             -e 's/ --\+$/-->/g' \
             -e 's/^\/\/-\+/<!--/g' \
             -e 's/-\+>/-->/g'  \
             -e 's/<!-\+/<!--/g' \
             -e 's/<!-\+>//g' > ${1}.bak

với :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//DE">
<HTML>
<HEAD>
<TITLE>Bang dao ham</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!---------------- info.js ------------------------------------------------
    /*Javascript*/
//-------------------- info.js ------------------------------------------->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!---------------------- newwindow.js ------------------------------------------
    /*javascript*/
//------------------------- neufenst.js -------------------------------------->
</SCRIPT>
<META NAME="description" CONTENT="Ungleichungen f&#252;r den Absolutbetrag der Differenz zweier Zahlen">
<LINK REL="STYLESHEET" HREF="../sonder/bron.css">
<LINK REL="next" HREF="node101.htm">
<LINK REL="previous" HREF="node99.htm">
<LINK REL="up" HREF="node98.htm">
<LINK REL="next" HREF="node101.htm">
</HEAD>
<BODY BGCOLOR = "#f7ffef"  LINK="#1320a5" VLINK="#633586" TEXT="#000000"  onload="if (Suchen) window.find(location.search.substring(1)); window.defaultStatus='DesTop Bronstein';">
<!-- ------------------------------ -->
<!-- ----- Begin Page: header ------------------------ -->
    <H1>Here is place for Header</H1>
<!-- ----- End header ------------------------------------- -->
    <H2>Main Inhalt here</H2>
<!-- ----- Start Footnote --------------- -->
    <H2>Footnote here</H2>
<!-- ----- End Footnote --------------- -->
</BODY>
</HTML>

tớ thu được:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//DE">
<HTML>
<HEAD>
<TITLE>Bang dao ham</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!-- info.js-->
    /*Javascript*/
<!-- info.js -->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
<!-- newwindow.js-->
    /*javascript*/
<!-- neufenst.js -->
</SCRIPT>
<META NAME="description" CONTENT="Ungleichungen f&#252;r den Absolutbetrag der Differenz zweier Zahlen">
<LINK REL="STYLESHEET" HREF="../sonder/bron.css">
<LINK REL="next" HREF="node101.htm">
<LINK REL="previous" HREF="node99.htm">
<LINK REL="up" HREF="node98.htm">
<LINK REL="next" HREF="node101.htm">
</HEAD>
<BODY BGCOLOR = "#f7ffef"  LINK="#1320a5" VLINK="#633586" TEXT="#000000"  onload="if (Suchen) window.find(location.search.substring(1)); window.defaultStatus='DesTop Bronstein';">
<!--Begin Page: header-->
    <H1>Here is place for Header</H1>
<!--End header-->
    <H2>Main Inhalt here</H2>
<!--Start Footnote-->
    <H2>Footnote here</H2>
<!--End Footnote-->
</BODY>
</HTML>

kHông biết đã đúng ý đồ tác giả chưa smile

Last edited by tuantub (13/03/2009 06:07)

15

Re: script để edit file với regular express

@tuantub: nếu có nhiều thao tác với sed thì nên ghi vào trong 1 script rồi run sed với tuỳ chọn -f, không cần viết shell script.

Ví dụ:

#!/usr/bin/sed -f
s/ --\+-- //g
s/ --\+$/-->/g
s/^\/\/-\+/<!--/g
# ...
"La photographie est une brève complicité entre la prévoyance et le hasard." John Stuart Mill

16

Re: script để edit file với regular express

vnpenguin viết:

@tuantub: nếu có nhiều thao tác với sed thì nên ghi vào trong 1 script rồi run sed với tuỳ chọn -f, không cần viết shell script.

Ví dụ:

#!/usr/bin/sed -f
s/ --\+-- //g
s/ --\+$/-->/g
s/^\/\/-\+/<!--/g
# ...

smile cảm ơn bác FêDô, xì pam tí tongue

17

Re: script để edit file với regular express

để mình gọi thần tượng môn RegExp của mình xuống núi đấu với bạn FêĐô tongue

Không có gì quí hơn Độc Lập - Tự Do
-- Hồ Chí Minh

18

Re: script để edit file với regular express

Cám ơn bác tuantub nhiều, code của bác xịn quá.

19

Re: script để edit file với regular express

Nghịch thử cái sed cũng zui ^^

sed 's:^//:<!--:; s/^\(<!--\)[ -]*\([^-]*\) .*/\1 \2 -->/'  test.xml

20

Re: script để edit file với regular express

sao mọi người hướng dẫn nhau, giúp dỡ nhau cùng học hỏi mà viết mình không hiểu gì cả, viết kĩ hơn 1 chút được không

21

Re: script để edit file với regular express

bạn tham khảo ở đây:
http://www.grymoire.com/Unix/Regular.html#uh-10
http://www.grymoire.com/Unix/Sed.html#uh-3

22

Re: script để edit file với regular express

Thanks bạn….!!!
-------------------------
Tổng hợp các loại game gồm game hay về bóng đá, game dua xe…tại choi gamegame online……
Cập nhật gia vang 9999 hàng ngày……….