我對 sed 腳本完全陌生。我一直在研究如何將文本添加到檔案中,并設法將我想要添加到檔案中正確行的文本,但找不到將其添加到正確位置的方法!所以我在文本檔案中的行看起來像這樣
/^From: \s*(.*@)?(((test\.new\.com)))/ REJECT You are not me
我想從用戶那里獲取輸入并將輸入添加到上面的行,結果應該如下所示,用戶輸入是“test2.newer.com”,我想添加這個字串 |(test2\.newer\.com)
/^From: \s*(.*@)?(((test\.new\.com)|(test2.\newer\.com)))/ REJECT You are not me
我試試這個但不作業
read -p "Enter new domain: " newdomain
file="./testfile"
sed -i "/You are not me/ s/^\(.*\)\())\)/\1, |($newdomain)\2/" $file
我該如何將它添加到正確的位置?
uj5u.com熱心網友回復:
使用Escape a string for a sed replace 模式,您可以替換任何您想要的行內容。
lineinfile='/^From: \s*(.*@)?(((test\.new\.com)))/ REJECT You are not me'
newcontent='/^From: \s*(.*@)?(((test\.new\.com)|(test2.\newer\.com)))/ REJECT You are not me'
ESCAPED_KEYWORD=$(printf '%s\n' "$lineinfile" | sed -e 's/[]\/$*.^[]/\\&/g');
ESCAPED_REPLACE=$(printf '%s\n' "$newlinecontent" | sed -e 's/[\/&]/\\&/g')
sed "s/$ESCAPED_KEYWORD/$ESCAPED_REPLACE/g"
uj5u.com熱心網友回復:
使用 sed
$ newdomain="(test2.\\\newer\.com)"
$ sed "s|\([^)]*.[^)]*)\)\(.*\)|\1\|$newdomain\2|" input_file
/^From: \s*(.*@)?(((test\.new\.com)|(test2.\newer.com)))/ REJECT You are not me
uj5u.com熱心網友回復:
有了
newdomain='test2\.newer\.com'
可以使用awk的命令
awk -v repl="${newdomain//\\/\\\\}" '
BEGIN {OFS=FS=")))"}
/You are not me/ {$1=$1 ")|(" repl}
1
' "$file" > "$file".new && mv "$file".new "$file"
說明:
${newdomain//\\/\\\\}"awk 想要將轉義序列\.視為 a .,因此添加反斜杠。
BEGIN {OFS=FS=")))"}在決議行之前將“)))”設定為欄位分隔符(輸入和輸出)。
/You are not me/使用此子字串更改行。
$1=$1 ")|(" repl'將)|(字串追加repl到$1.
1列印該行。
"$file" > "$file".new && mv "$file".new "$file"Dp 不就地編輯,而是重定向到一個新檔案,并在awk成功時將該檔案移動到原始檔案。
uj5u.com熱心網友回復:
謝謝大家,我發現我的問題和答案是這樣的:
read -p "Enter domain: " newdomain
sed -i "/You are not me/ s/\()))\)/)|$newdomain)))/' $file
但輸出是這樣的:
/^From: \s*(.*@)?(((test\.new\.com)|(test2.newer.com)))/ REJECT You are not me
但我想要這個輸出:
/^From: \s*(.*@)?(((test\.new\.com)|(test2.\newer\.com)))/ REJECT You are not me
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/406200.html
標籤:
上一篇:是否有任何有效且快速的方法可以在日志檔案中捕獲兩個匹配項?
下一篇:處理bash腳本中的特殊字符
