Linux/Unix 替换字符串中的模式并使用 sed 保存到新文件
Linux/Unix Replacing a pattern in a string and saving to a new file with 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
你可以试试这个 sed
命令
sed 's/,\(.*china\)/,Tomas_proxy.lt\//' FileName
或
sed 's/,\(.*china\)/,Tomas_proxy.lt\//' FileName > NewFile
或
sed -i.bak 's/,\(.*china\)/,Tomas_proxy.lt\//' FileName
sed '/[Cc]hina/s/,/,Tomas_proxy.lt\//' File > New_File
在所有匹配 china
/ China
的行中(如果您不想检查大小写,请更改),将第一个 ,
替换为 ,Tomas_proxy.lt/
。输出重定向到 New_File
.
如果您希望更改在同一个文件中,请使用 -i
(就地选项):
sed -i '/[Cc]hina/s/,/,Tomas_proxy.lt\//' File
她是 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/
,然后打印所有行。
sed '/china/ s#,#,Tomas_proxy.lt/#' YourFile
根据您的示例并假设第一个 ,
是在行中插入您的文本的地方
我有一个任务,要替换字符串中的特定模式。
到目前为止,我尝试了 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
你可以试试这个 sed
命令
sed 's/,\(.*china\)/,Tomas_proxy.lt\//' FileName
或
sed 's/,\(.*china\)/,Tomas_proxy.lt\//' FileName > NewFile
或
sed -i.bak 's/,\(.*china\)/,Tomas_proxy.lt\//' FileName
sed '/[Cc]hina/s/,/,Tomas_proxy.lt\//' File > New_File
在所有匹配 china
/ China
的行中(如果您不想检查大小写,请更改),将第一个 ,
替换为 ,Tomas_proxy.lt/
。输出重定向到 New_File
.
如果您希望更改在同一个文件中,请使用 -i
(就地选项):
sed -i '/[Cc]hina/s/,/,Tomas_proxy.lt\//' File
她是 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/
,然后打印所有行。
sed '/china/ s#,#,Tomas_proxy.lt/#' YourFile
根据您的示例并假设第一个 ,
是在行中插入您的文本的地方