我有一個包含若干行的文件:命令截斷文件中引用的字符串?
revision="abcdabcdabcd0000111122223333"
revision="0000111122223333444455556666"
我要截斷帶引號的字符串(例如,8)所示:
revision="abcdabcd"
revision="00001111"
如何使用sed
/awk
/perl
要達到這個目標嗎?
我有一個包含若干行的文件:命令截斷文件中引用的字符串?
revision="abcdabcdabcd0000111122223333"
revision="0000111122223333444455556666"
我要截斷帶引號的字符串(例如,8)所示:
revision="abcdabcd"
revision="00001111"
如何使用sed
/awk
/perl
要達到這個目標嗎?
也許:
sed -i 's/\(revision="........\)[^"]*"/\1"/' file
是關鍵字總是修訂?字符串中的信息是否總是長於8個字符?
我想我會看是這樣的:
sed 's/^\([a-z]*\)="\([^"]\{1,8\}\)[^"]*"/\1="\2"/' input > output
這看起來對於任何小寫唯一關鍵字(這是記憶)等號和一個雙引號之前,然後查找1-8非雙引號字符(被記住),其後是零個或多個其他非雙引號和雙引號;這些被替換爲關鍵字,等於,雙引號,記住的非雙引號和雙引號。如果有任何尾隨材料,則不做修改。
一個Perl的解決方案:
perl -pi.bak -we 's/^revision="[^\n"]{0,8}\K.*/"/' myfile.txt
將節省備份myfile.txt.bak
。刪除i.bak
以僅查看輸出而不更改文件。刪除.bak
不存儲備份(不可逆轉)。
該正則表達式將查找並更改以revision="
開頭的任何行。在這場比賽之後,它將保留以下0-8個不是雙引號或換行符(*)的字符,並刪除其餘的。它將在換行符之前添加一個雙引號。
(*)添加了換行符以防止嵌入的換行符或格式不正確的行損壞文件。這將通過添加關閉引號來「解決」打開雙引號。
perl -i~ -pe's/^revision="[^"]{0,8}\K[^"]+//' file
(+1)...錯字:它在開始時需要's'。 'sed's/...' – 2012-03-18 08:31:07
感謝 - @ Peter.O和Glenn。 – 2012-03-18 14:35:08