因此,我一直在使用以下通用語法來洗掉組態檔中“=”符號之后的一行上的文本:
sed -i 's|\(.*\txt_to_remove=\).*|\1|g' file.txt
假設我有一個文本檔案:
$ cat tmp.txt
datee='10'
alter='purple'
hr='green'
new_val='100'
如果我連續使用上面提供的命令嘗試洗掉“=”之后的所有內容:
sed -i 's|\(.*\datee=\).*|\1|g' tmp.txt
sed -i 's|\(.*\alter=\).*|\1|g' tmp.txt
sed -i 's|\(.*\hr=\).*|\1|g' tmp.txt
sed -i 's|\(.*\new_val=\).*|\1|g' tmp.txt
結果將是:
$ cat tmp.txt
datee=
alter='purple'
hr=
new_val='100'
問題是,為什么這些命令對“alter”或“new_val”不起作用,可以做些什么來確保它始終適用于使用該命令的每個單獨實體?
uj5u.com熱心網友回復:
通過以下方式一次完成所有操作:
sed -i 's/^\(\(datee\|alter\|hr\|new_val\)=\).*/\1/g' tmp.txt
uj5u.com熱心網友回復:
在要替換的關鍵字之前有一個反斜杠。反斜杠是轉義前綴,\a并且\n是轉義序列,因此它們與檔案中的內容不匹配。
擺脫這些反斜杠。
sed -i 's|\(.*datee=\).*|\1|g' tmp.txt
sed -i 's|\(.*alter=\).*|\1|g' tmp.txt
sed -i 's|\(.*hr=\).*|\1|g' tmp.txt
sed -i 's|\(.*new_val=\).*|\1|g' tmp.txt
uj5u.com熱心網友回復:
試試我試過的這個 sed 運算式sed 's/=.*//'
并得到了想要的結果
cat tmp.txt | sed 's/=.*//'
datee
alter
hr
new_val
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487328.html
