在我的 Bash 脚本中,我必须将名称更改为文本文件中的路径地址(新地址):
(MYADDREES) 更改为 ( /home/run1/c1
) 并将其另存为新文件。
我是这样做的:定义了一个新变量 = 新地址,并尝试用文本文件中的先前地址替换它。
我使用 sed 但它有问题。
我的脚本是:
#!/bin/bash
# To debug
set -x
x=`pwd`
echo $x
sed "s/MYADDRESS/$x/g" < sample1.txt > new.txt
exit
pwd
的输出可能包含 /
字符,使您的 sed 表达式看起来像 s/MYADDRESS//home/user/somewhere/
。这使得 sed
无法整理出应该用什么替换什么。有两种解决方案:
为 sed 使用不同的分隔符:
sed "s,MYADDRESS,$x,g" < sample1.txt > new.txt
...尽管如果当前路径包含逗号字符或其他对 sed
来说是特殊字符的字符,也会出现同样的问题,因此更健壮方法是使用 awk
代替:
awk -v curdir="$(pwd)" '{ gsub("MYADDRESS", curdir); print }' < sample1.txt > new.txt