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

问题描述:

经过一些Google搜索后,我发现sed命令是我所需要的。说实话,这个命令的旗帜似乎不可能理解。我想要做的就是用另一个文件替换单引号的文件。 word1,word2等不是单/双引号。例如:如何替换unix中的文件的字符串

前:foo.txt的

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

后:foo.txt的

word1 word2 word3 'I have been replaced' word4 word5 

请注意文本 '这需要替换文本' 是不是恒定的,其内容可能变化。

+0

_sed_命令非常简单,以至于无法围绕脚本进行包装。如果要替换的文本不是常量,只需在前两个斜线之间键入其他内容:sed -e“s /'something else'/'新文本'/ g”foo.txt> bar.txt“...除非这是一些常见操作的一个步骤,但是您需要提供更多信息。 –

+0

@StephenP感谢您的回复。现在的语法看起来很容易,但我不知道文本的内容,所以我不能使用那个'别的东西'。实际上,唯一的常量是单词(wordN)。 –

+0

好吧,你怎么知道哪些文字将被替换,以及替换文字是什么?为了运行该命令,你必须知道它在某个点上的位置。而且,任何'wordM wordN wordO wordP'都会包含一个撇号吗?这可能很重要,因为单引号和撇号是相同的。编程时,你必须清楚你的问题空间。 –

这将替换字符串在单引号中... ...的东西。你的问题不够具体。

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

因为单引号在搜索表达式中使用,我们把双引号整个sed脚本来代替。这意味着任何将受到shell替换的东西(特别是反斜杠和美元符号,当然还有字面双引号)都需要在脚本表达式中转义。

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

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

+0

正是我需要的!当然,我会使用-i标志,以便更改生效。感谢您的回复详细阐述:) –

+0

我正在调用sed命令的脚本。我想使用字符串($ str)的值来代替某些东西,但它似乎不起作用。有任何想法吗? –

+0

听起来像你应该写一个新的问题,这次与所有的细节。回到这个问题的上下文。不过,这是一个非常普遍的话题。你应该解释你的方法与你很容易找到的无数近似重复是不同的。 – tripleee

只是这样的语法替换它:

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 
+1

[UU](http://*.com/q/11710552/17300)[OC](http://superuser.com/q/323060/101891) - sed写入标准输出,所以你的第一个例子'cat foo .txt | ...'相当于'sed -e's /想要/已经/ g'foo.txt' foo.txt没有被修改,它被sed读取,转换并写入写入stdout的结果。典型的用法是'sed -e's/this/that/g'inputfile.txt> outputfile.txt'我使用你的'-i。大部分时间都是我自己的风格。 –