如何在UNIX shell脚本

时间:2015-07-03 07:34:48

标签: shell unix

您能告诉我如何用另一个字符串替换文本文件或服务器中的ksh文件中的特定字符串吗?

例如: -

我在路径/file_sys/file中有10个文件,我必须在所有10个文件中将“BILL”替换为“BILLING”。

4 个答案:

答案 0 :(得分:1)

适合我:

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

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

之后文件'测试'包含以下内容:"这不是一个简单的测试"

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

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

答案 1 :(得分:0)

这应该有效。请找到测试。

$ cat>文件1

我是比尔男孩

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

$ cat file2

我是一个令人讨厌的男孩

答案 2 :(得分:0)

使用sed

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

对于inplace:

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

答案 3 :(得分: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用BILLING替换单词BILL(这里,专门用单词边界分隔“\ b”)到tmp文件中 mv command将tmp文件移回原始名称(替换原始名称)

您可以轻松测试此内容而无需实际更改任何内容 - 例如只需打印文件名,或只打印内容(以确保在更换原始文件之前已达到预期效果)。