您能告诉我如何用另一个字符串替换文本文件或服务器中的ksh
文件中的特定字符串吗?
例如: -
我在路径/file_sys/file
中有10个文件,我必须在所有10个文件中将“BILL”替换为“BILLING”。
答案 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文件移回原始名称(替换原始名称)
您可以轻松测试此内容而无需实际更改任何内容 - 例如只需打印文件名,或只打印内容(以确保在更换原始文件之前已达到预期效果)。