【发布时间】:2011-12-21 15:00:11
【问题描述】:
我试过这个:
sed -i 's/'Twas/It certainly was/g' *.txt
有什么建议吗??
【问题讨论】:
-
我想我知道出了什么问题,但是在以后问这样的问题时,请描述发生了什么,以及您预期会发生什么。这使人们更容易弄清楚发生了什么。
标签: unix command-line sed
我试过这个:
sed -i 's/'Twas/It certainly was/g' *.txt
有什么建议吗??
【问题讨论】:
标签: unix command-line sed
使用双引号
sed -i "s/'Twas/肯定是/g" *.txt【讨论】:
'Twas 中的撇号被解释为右引号(由 shell,而不是 sed),然后/g 之后的后续单引号被解释为 open 引号,它愉快地一直吞噬到脚本的末尾(或命令提示符,然后你会得到神秘的>,这意味着 shell 认为还有更多的东西要来)。对于这种情况,
sed -i "s/'Twas/It certainly was/g" *.txt
应该有效;然而,shell 双引号字符串做了很多你通常不希望使用 sed 程序的事情。如果那里有任何正则表达式元字符,我会这样做
sed -i 's/'\''Twas/It certainly was/g' *.txt
【讨论】:
sed 无法轻松做到这一点,因为它不支持单词边界匹配。但是perl -pi~ -e 's/\bthe\b/a/g; s/\bThe\b/A/g' 会这样做。我不知道用一个正则表达式进行两种替换的任何聪明方法,但也许其他人会这样做。
尝试使用以下
grep -rl "旧字符串" 目录路径 | xargs sed -i 's/oldString/new String/g'
例子:
grep -rl 10.113.1.115 匹配目录 | xargs sed -i 's/10.113.1.115/10.113.1.65/g'
【讨论】: