如何在unix中替换文件的字符串

时间:2015-10-20 03:12:34

标签: unix sed

经过一些谷歌搜索后,我发现sed命令就是我所需要的。说实话,这个命令的旗帜似乎无法理解。我想做的就是用另一个文件替换单引号的文件串。 word1,word2等不是单引号或双引号。例如:

之前:foo.txt

word1 word2 word3 'This the text that needs replacement' word4 word5

之后:foo.txt

word1 word2 word3 'I have been replaced' word4 word5

请注意文字'这是需要更换的文字'不是常数,其内容可能会有所不同。

2 个答案:

答案 0 :(得分:1)

这会将单引号中的字符串替换为......某事。你的问题不够具体。

sed "s/'[^']*'/'something'/" file

由于在搜索表达式中使用了单引号,因此我们将整个sed脚本放在双引号中。这意味着任何需要进行shell替换的东西(特别是反斜杠和美元符号,当然还有文字双引号)都需要在脚本表达式中进行转义。

正则表达式'[^']*'表示单引号,后跟一个不是单引号的字符,重复零次或多次,后跟另一个单引号。换句话说,任何不是单引号的单引号。

此外,这将打印到标准输出。使用sed -i就地修改文件,或将输出重定向到您想要的位置。

答案 1 :(得分:0)

只需用以下语法替换它:

cat foo.txt  | sed -e 's/want to be/have been/g'

替换文件(例如,在mac上)

sed -i '' 's/want to be/have been/g' foo.txt

或其他unix

sed -i.bak 's/want to be/have been/g' foo.txt