題 如何在sed中使用逐字字符串?


例如。,

sed 's/string/ /g' where string="a\c:ti]\']x""/\//:`~$%#^&"'

那就是如何將字符串傳遞給sed而不是作為解釋的正則表達式模式?

我將在cygwin和ubuntu上使用它,因此解決方案應該與環境兼容。


5
2018-04-06 23:26


起源


有關: stackoverflow.com/questions/407523/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


答案:


您應該轉義特殊字符並使用“/”以外的分隔符。

sed 's#string1#string2#'

2
2018-04-06 23:37



我經常看到 | 當使用sed時。 - Rob
不可否認,這是一個醜陋的字符串。 - Scott C Wilson


看到這個SOq:

以上答案如下:

是你需要的東西,除了你在第一部分,而不是第二部分 s/first/second/

因為你正在使用兩者 ' 和 " 在你的sed命令中,你將不得不逃避它的一些。嘗試這樣做 - 製作兩個文件:

1.sed

s_"a\\c:ti]\\']x""/\\//:`~\$%#\^&"'_ _g

2.txt

"a\c:ti]\']x""/\//:`~$%#^&"'hello world m"a\c:ti]\']x""/\//:`~$%#^&"'
"a\c:ti]\']x""/\//:`~$%#^&"'this is working"a\c:ti]\']x""/\//:`~$%#^&"'
"a\c:ti]\']x""/\//:`~$%#^&"'as expected"a\c:ti]\']x""/\//:`~$%#^&"'

1.sed是腳本本身,2.txt是測試文件。像這樣運行來測試:

$ sed -f 1.sed 2.txt
 hello world m 
 this is working 
 as expected 

$ 

希望這可以幫助。


1
2018-04-07 01:50



什麼命令用於轉義? echo“a \ c:ti] \'] x”“/ \ //:`〜$%#^&”'| sed -e's /([[\ /.*] \ |])/ \\ &/ g'在bash中產生>提示。 - user93200
如果你混合兩者 ' (單引號)和 " (雙引號),你將不得不逃避字符串中的東西。這不是一個“問題” sed 本身,即使你只是回應“a \ c:ti] \'] x”“/ \ //:~$%#^&"', it will be not a complete string. E.g. you cannot do echo "abc"" and expect it to print abc“` - 你必須逃脫 "。 - icyrock.com
您是否可以提供自動轉義任何給定字符串的命令,並詳細說明解決方案可能受環境影響(在bash或cmd.exe中運行)? - user93200
提供的鏈接中的命令為您提供(您在第一個評論中放入的答案)。問題是你不能按照你想要的方式做到 - 來自的輸入 echo 命令甚至無法到達 sed 要逃脫,它必須在原地逃脫,甚至印刷 echo 正確。另一個解決方案 - 將字符串放入文件 - 是可行的,請參閱我的編輯。希望能為你效勞。 - icyrock.com