Linux 一些文本重放问题。请告知

Linux 一些文本重放问题。请告知,linux,bash,scripting,sed,Linux,Bash,Scripting,Sed,我不熟悉bash脚本,但我遇到了一个问题。我想用另一行替换文件中的一行。这是我的档案: /home/iosub/linux/fis2 b7c839bf081421804e15c51d65a6f8fc - /home/iosub/linux/e212CIosub/doi 7edd241b1f05a9ea346c085b8c9e95c5 - /home/iosub/linux/e212CIosub/test2 7edd241b1f05a9ea346c085b8c9e95c5 -

我不熟悉bash脚本,但我遇到了一个问题。我想用另一行替换文件中的一行。这是我的档案:

/home/iosub/linux/fis2 b7c839bf081421804e15c51d65a6f8fc -  
/home/iosub/linux/e212CIosub/doi 7edd241b1f05a9ea346c085b8c9e95c5 -    
/home/iosub/linux/e212CIosub/test2 7edd241b1f05a9ea346c085b8c9e95c5 -    
/home/iosub/linux/e212CIosub/xab ed4940ef42ec8f72fa8bdcf506a13f3d -    
/home/iosub/linux/e212CIosub/test1 8af599cfb361efb9cd4c2ad7b4c4e53a -    
/home/iosub/linux/e212CIosub/xaa 8cf57351b5fc952ec566ff865c6ed6bd -    
/home/iosub/linux/e212CIosub/test3 74420c2c4b90871894aa51be38d33f2c -
没有空白行。我想换一条线

for example  /home/iosub/linux/e212CIosub/test1 8af599cfb361efb9cd4c2ad7b4c4e53a -
with         /home/iosub/linux/e212CIosub/test1 d2199e312ecd00ff5f9c12b7d54c97f1 -
我在一个变量中有/home/iosub/linux/e212CIosub/test1,在另一个变量中有新代码

我知道我必须使用sed。我怎么做

我尝试过很多组合,比如:

sed "/$1/d"  cont > cont2;
其中$1是/home/iosub/linux/e212CIosub/test1

然后,我将新字符串连接到文件。这会将新行放在文件的末尾,这将是一个很好的解决方案,如果它可以工作的话。但它没有。它给出了一个错误:sed:-e表达式1,char 5:命令后的额外字符

我也尝试过替换方法,但没有得到任何结果

任何解决方案都是好的。感谢编辑在@chars前面添加了“\”作为初始正则表达式分隔符

当您的搜索模式中有一个“/”字符时,它会中断该字符“/”作为reg exp分隔符的使用。使用不在正则表达式中的正则表达式分隔符,即

sed "\@$1@d" cont > cont2
然后继续处理

但以你为例,你为什么不这样做呢

sed "s\@\($1\)(.*$)@\1 $2 -@" cont > cont2
这将匹配$1中的值,基本上删除$1值后的文本,并打印$1值,后跟空格、$2值d2….、空格和结尾的“-”字符

最后,我要提到的是,某些遗留unixsed的aix似乎不接受转义regex分隔符char,但我现在无法访问系统来验证这一点。在这种情况下,您必须转义正则表达式搜索模式中的所有“/”,比如\/home\/iosub\/linux\/e212CIosub\/test1,yikes

我希望这会有所帮助。

edit在@chars前面添加了“\”作为初始正则表达式分隔符

sed "s@$1@$var@g" -i filename
当您的搜索模式中有一个“/”字符时,它会中断该字符“/”作为reg exp分隔符的使用。使用不在正则表达式中的正则表达式分隔符,即

sed "\@$1@d" cont > cont2
然后继续处理

但以你为例,你为什么不这样做呢

sed "s\@\($1\)(.*$)@\1 $2 -@" cont > cont2
这将匹配$1中的值,基本上删除$1值后的文本,并打印$1值,后跟空格、$2值d2….、空格和结尾的“-”字符

最后,我要提到的是,某些遗留unixsed的aix似乎不接受转义regex分隔符char,但我现在无法访问系统来验证这一点。在这种情况下,您必须转义正则表达式搜索模式中的所有“/”,比如\/home\/iosub\/linux\/e212CIosub\/test1,yikes

我希望这有帮助

sed "s@$1@$var@g" -i filename
这将用文件名中的$var替换所有出现的$1


这将用文件名中的$var替换所有出现的$1。

不清楚值“d2199e312ecd00ff5f9c12b7d54c97f1”来自何处。它不在您提供的示例数据中。它还可能有助于包括sed之后正在进行的更多处理@$1@d ... . 祝你好运。不清楚你的值“d2199e312ecd00ff5f9c12b7d54c97f1”来自何处。它不在您提供的示例数据中。它还可能有助于包括sed之后正在进行的更多处理@$1@d ... . 祝你好运