我的檔案有連續的字母流,每行最多 10 個字母,如下所示:
ABCDEFGHIJ
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXABCDEF
ABCDEFGHIJ
我想洗掉三個成對的 X,所以我希望結果是
ABCDEFGHIJ
XABCDEF
ABCDEFGHIJ
我目前的做法是
sed 's/XXX//g' inputFile > outputFile
但這僅考慮單行內的模式,并導致:
ABCDEFGHIJ
X
X
X
XABCDEF
ABCDEFGHIJ
我需要如何制定搜索模式以忽略換行符,以便基本上接受 XXX、X\nXX 和 XX\nX?這可以用 sed 或其他命令實作嗎?
uj5u.com熱心網友回復:
用 GNU sed。修改您的正則運算式。
sed -zE 's/X\n{0,1}X\n{0,1}X\n{0,1}//g' inputFile > outputFile
或更短:
sed -zE 's/(X\n?){3}//g' inputFile > outputFile
輸出到outputFile:
ABCDEFGHIJ XABCDEF ABCDEFGHIJ
-z: 用 NUL 字符分隔行
uj5u.com熱心網友回復:
這將做到:
paste -sd '' your_file | sed 's/XXX/ /g' | fold -w 10 | sed 's/ //g; /^$/d'
paste -sd '' your_file將所有行合并為一行sed 's/XXX/ /g'用三個空格替換三個 X(請注意,如果原始檔案有空格,這將是有問題的,因為在最后一步我將它們全部洗掉......如果是這種情況,您可以選擇其他一些獨特的替換)。fold -w 10將長行折疊回一組 10 個字符長的行sed 's/ //g; /^$/d'洗掉空格并洗掉任何空行(如果您在第二步中使用了一些其他唯一替換而不是空格,請在此步驟中洗掉它而不是空格)。
輸出
ABCDEFGHIJ
XABCDEF
ABCDEFGHIJ
uj5u.com熱心網友回復:
這可能對你有用(GNU sed):
sed -zE 's/(X|X\n){3}//g' file
或者沒有-zslurp 選項:
sed -E 'H;$!d;x;s/^\n|(X|X\n){3}//g' file
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/369240.html
上一篇:帶有創建日期的水印png影像
