Linux / Unix用字符串替换字符串中的模式并使用sed保存到新文件

时间:2015-01-20 11:19:25

标签: linux design-patterns sed

我有一项任务,要替换字符串中的特定模式。 到目前为止,我尝试过像sed -e 's/text_to_find/text_to_replace/g' file这样的命令 但我不知道为什么它改变了所有字符串,而不仅仅是我想要改变的部分。

我想要做的是在每个包含单词china的字符串中添加Tomas_proxy.lt

为了说清楚,我正在寻找什么,我正在使用的文件:

987173,businesswirechina.com
988254,chinacfa.com
988808,1012china.com
989146,chinawise.ru
989561,chinaretailnews.com
989817,mobileinchina.cn
990894,cmt-china.com.cn
990965,chinajoy.net
992753,octaviachina.com
993238,chinadftzalex.com
993447,china-kena.com

这是我想在新文件中看到的

987173,Tomas_proxy.lt/businesswirechina.com
988254,Tomas_proxy.lt/chinacfa.com
988808,Tomas_proxy.lt/1012china.com
989146,Tomas_proxy.lt/chinawise.ru
989561,Tomas_proxy.lt/chinaretailnews.com
989817,Tomas_proxy.lt/mobileinchina.cn
990894,Tomas_proxy.lt/cmt-china.com.cn
990965,Tomas_proxy.lt/chinajoy.net
992753,Tomas_proxy.lt/octaviachina.com
993238,Tomas_proxy.lt/chinadftzalex.com
993447,Tomas_proxy.lt/china-kena.com

P.S。这只是示例文件,在我使用的实际文件中,并非每行都有单词china,有100000个字符串,让我们说约有500个china

4 个答案:

答案 0 :(得分:6)

您可以尝试此sed命令

sed 's/,\(.*china\)/,Tomas_proxy.lt\/\1/' FileName

sed 's/,\(.*china\)/,Tomas_proxy.lt\/\1/' FileName > NewFile

sed  -i.bak 's/,\(.*china\)/,Tomas_proxy.lt\/\1/' FileName 

答案 1 :(得分:0)

sed '/[Cc]hina/s/,/,Tomas_proxy.lt\//' File > New_File

在与china / China匹配的所有行中(如果您不想进行案例检查,请进行更改),将第一个,替换为,Tomas_proxy.lt/。输出重定向到New_File

如果您希望更改位于同一文件中,请使用-i(inplace选项):

sed -i '/[Cc]hina/s/,/,Tomas_proxy.lt\//' File

答案 2 :(得分:0)

她是awk版本:

awk '/china/ {sub(/,/,"&Tomas_proxy.lt/")} 1' file
987173,Tomas_proxy.lt/businesswirechina.com
988254,Tomas_proxy.lt/chinacfa.com
988808,Tomas_proxy.lt/1012china.com
989146,Tomas_proxy.lt/chinawise.ru
989561,Tomas_proxy.lt/chinaretailnews.com
989817,Tomas_proxy.lt/mobileinchina.cn
990894,Tomas_proxy.lt/cmt-china.com.cn
990965,Tomas_proxy.lt/chinajoy.net
992753,Tomas_proxy.lt/octaviachina.com
993238,Tomas_proxy.lt/chinadftzalex.com
993447,Tomas_proxy.lt/china-kena.com

搜索china,如果找到,请将,替换为,Tomas_proxy.lt/,然后打印所有行。

答案 3 :(得分:0)

sed '/china/ s#,#,Tomas_proxy.lt/#' YourFile

根据您的示例并假设首先,是在文本中插入文字的地方