Shell-Script
如何在替換期間忽略 sed 中的起始空格?
我想在模式搜尋和替換期間忽略文件中的開頭空格。最終輸出不需要有空格。我必須匹配整行並替換為所需的行。嘗試了不同的方法,但由於空格不匹配,因此沒有發生替換。
輸入文件.txt:
Access /var/tmp/access.log LogFormat "%h \"%r\" %>s %b\" common Error /var/tmp/err.log
預期的文件.txt:
Access /var/tmp/access.log LogFormat "%T %h \"%r\" %>s %b" common Error /var/tmp/error.log
以下是我嘗試過的,沒有一個有效。該文件保持不變。
source1="LogFormat \"%h \\"%r\\" %>s %b\" common" destination1="LogFormat \"%T %h \\"%r\\" %>s %b\" common" sed -i "s|$source1|$destination1|" file.txt sed -i "s|^(\s*)$source1|$destination1|" file.txt sed -i "s|^\s*$source1|$destination1|" file.txt sed -i "s|^[[:blank:]]$source1|$destination1|" file.txt sed -i "s|^[[:blank:]]*$source1|$destination1|" file.txt
請讓我知道如何實現這一目標。提前致謝。
您必須對
source1
變數進行雙重轉義並使用單引號:$ source1='LogFormat \\\"%h \\\\"%r\\\\" %>s %b\\\" common' $ sed "s|$source1|$destination1|" file Access /var/tmp/access.log LogFormat "%T %h \"%r\" %>s %b" common Error /var/tmp/err.log
使用
\s
(在 GNU 中sed
):$ sed "s|^\s*$source1|$destination1|" file Access /var/tmp/access.log LogFormat "%T %h \"%r\" %>s %b" common Error /var/tmp/err.log