2015-07-03 35 views
0

您能否让我知道如何用另一个字符串替换服务器中文本文件或ksh文件中存在的特定字符串?如何在UNIX shell脚本中用另一个字符串替换特定的字符串

例如: -

我目前在路径/file_sys/file 10个文件在我所“结算”,在所有10个文件一词取代“条例”。

+1

看看'sed'和'awk'工具。首先阅读他们的手册页。 – arkascha

+0

是的,我尝试过使用sed -i's/BILL/BILLING/g'*但是我得到错误sed:非法选项 - 我 –

+0

您本地'man'页面记录了'-i'标志和您的'sed'命令才不是?这听起来有点奇怪... – arkascha

回答

1

工作对我来说:

我创建了一个文件“测试”这一内容:“这是一个简单的测试”。现在我执行这个调用sed命令:

sed -i 's/ is/is not /' test 

之后的文件“测试”包含此内容:“这不是一个简单的测试”


如果您sed实用程序不支持-i标志,然后有一个有点尴尬的解决方法:

sed 's/ is/is not /' test > tmp_test && mv tmp_test test 
+0

我试过用sed的/ BILL/BILLING/g'示例。txt 但它并不适用于我,因为Example.txt文件仍然具有'BILL'值 –

+0

我为您的奇怪版本的'sed'添加了一种解决方法。尴尬,但工作。 – arkascha

+0

哦,另一个提示:你的正则表示法试图替换字符串'BILL',而不是'BILL'(注意尾部空格(''))。如果你的文件不包含空白,那么正则表达式将不会匹配和替换... – arkascha

0

这应该工作。请找到测试。

$猫>文件1

我是BILL男孩

sed 's/[[:alnum:] [:cntrl:] [:lower:] [:space:] [:alpha:] [:digit:] [:print:] [:upper:] [:blank:] [:graph:] [:punct:] [:xdigit:]]BILL[[:alnum:] [:cntrl:] [:lower:] [:space:] [:alpha:] [:digit:] [:print:] [:upper:] [:blank:] [:graph:] [:punct:] [:xdigit:]]/BILLING/g' file1>file2 

$猫文件2

我是一个BILLING男孩

+0

无论单词BILL在您的文件中出现的位置如何,这都会起作用。 @NeethuShaji –

+0

txt文件只有BILL,没有别的。 我试着通过在BILL结尾处输入一个输入法,它的工作原理是...... BILL被BILLING替换为命令sed's/BILL/BILLING/g'Example.txt> Exam.txt –

+0

但是上面的代码不会要求你输入:)。 @NeethuShaji –

0

使用sed

sed 's/\bBILL\b/BILLING/g' file 

对于就地:

sed --in-place 's/\bBILL\b/BILLING/g' file 
0

for循环可能协助来处理多个文件,而且在这里我假设-i选项不可用:

for file in $(grep -wl BILL /file_sys/file/*); do 
    echo $file 
    sed -e 's/\bBILL\b/BILLING/g' $file > tmp 
    mv tmp $file 
done 

这里的发生的事情:
  grep -w          搜索包含词BILL
的所有文件(并且只有它)   grep -l          清单的文件名(而不是内容)
  $(....)          执行什么括号内(命令替换)
  for file in  遍历列表中的每个项目(每个文件与BILL在里面)
  echo $file      打印每个文件名我们循环过
  sed command  一词取代BILL(这里,用字边界“\ b”的具体界定)与计费,为tmp文件
  mv command    移动tmp的文件恢复到原来的名称(替代原)

你可以很容易地测试这个,而不需要实际改变任何东西 - 例如只是打印文件名,或者只是打印内容(以确保在更换原始文件之前已经得到了您所期望的内容)。

相关问题