您能否让我知道如何用另一个字符串替换服务器中文本文件或ksh
文件中存在的特定字符串?如何在UNIX shell脚本中用另一个字符串替换特定的字符串
例如: -
我目前在路径/file_sys/file
10个文件在我所“结算”,在所有10个文件一词取代“条例”。
您能否让我知道如何用另一个字符串替换服务器中文本文件或ksh
文件中存在的特定字符串?如何在UNIX shell脚本中用另一个字符串替换特定的字符串
例如: -
我目前在路径/file_sys/file
10个文件在我所“结算”,在所有10个文件一词取代“条例”。
工作对我来说:
我创建了一个文件“测试”这一内容:“这是一个简单的测试”。现在我执行这个调用sed
命令:
sed -i 's/ is/is not /' test
之后的文件“测试”包含此内容:“这不是一个简单的测试”
如果您sed
实用程序不支持-i
标志,然后有一个有点尴尬的解决方法:
sed 's/ is/is not /' test > tmp_test && mv tmp_test test
这应该工作。请找到测试。
$猫>文件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男孩
无论单词BILL在您的文件中出现的位置如何,这都会起作用。 @NeethuShaji –
txt文件只有BILL,没有别的。 我试着通过在BILL结尾处输入一个输入法,它的工作原理是...... BILL被BILLING替换为命令sed's/BILL/BILLING/g'Example.txt> Exam.txt –
但是上面的代码不会要求你输入:)。 @NeethuShaji –
使用sed
:
sed 's/\bBILL\b/BILLING/g' file
对于就地:
sed --in-place 's/\bBILL\b/BILLING/g' file
小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的文件恢复到原来的名称(替代原)
你可以很容易地测试这个,而不需要实际改变任何东西 - 例如只是打印文件名,或者只是打印内容(以确保在更换原始文件之前已经得到了您所期望的内容)。
看看'sed'和'awk'工具。首先阅读他们的手册页。 – arkascha
是的,我尝试过使用sed -i's/BILL/BILLING/g'*但是我得到错误sed:非法选项 - 我 –
您本地'man'页面记录了'-i'标志和您的'sed'命令才不是?这听起来有点奇怪... – arkascha