2012-03-27 77 views
1

我需要所使用的sed为以下需求量的使用sed的修改行使用SED

我有一个字符串作为$海峡,我需要更换的打击线在一个文件中

abh{1..$abh}    cdf_$ghu,xyz     * abh{}.$xy 

新修改的行应如下

abh{1..$abh}    cdf_$ghu,$str     * abh{}.$xy 

注意"xyz"可以是任意值。您能否告诉我如何在一个班轮中使用sed?

sed 's/\(^\s*abh{1..$abh}\s*\)\(.*xyz\)/\1/' file.txt 

但仍然无法正常工作。任何帮助,将不胜感激。

+1

怎么样'sed的 'S/XYZ/$ STR /''? – kev 2012-03-27 09:13:21

回答

1

试试这个:

$ sed 's|\(\S\+\s\+[^,]\+,\)\S\+\(\s\+.*\)|\1$str\2|' file.txt 
abh{1..$abh}    cdf_$ghu,$str     * abh{}.$xy 

甚至更​​简单:

$ sed 's|,\S\+|,$str|' example.txt 
+0

非常感谢您的回应它可以正常工作,但$ str的值不会被替换,而是$ str被打印为文字。例如,如果$ str =“Hello”,所以“Hello”应该以修改后的行打印。 – user419534 2012-03-27 09:54:59

+0

好的,我需要把变量放在单引号中,它工作。 sed's | \(\ S \ + \ s \ + [^,] \ +,\)\ S \ + \(\ s \ +。* \)| \'''str'\ 2 |' file.txt谢谢你的回应 – user419534 2012-03-27 10:04:55

+0

你也可以将单引号改为双引号,它启用变量在字符串中的插值。 – 2012-03-28 06:17:44

0
echo 'abh{1..$abh}    cdf_$ghu,xyz     * abh{}.$xy' | sed 's/\(.*\$ghu,\)\(.*\)\(.*\)/\1\$str\3/g' 
+0

选择您的代码,然后单击工具栏中的**图标。它会缩进你的代码。 – kev 2012-03-27 12:18:00

+0

感谢您的信息 – Vishal 2012-03-27 13:49:35