如果我想在文件中搜索一行并在该行的末尾添加一个字符串,我该怎么办呢?即:
file=?
我想搜索file=?
并用文件路径替换问号。文件路径位于变量$FILEPATH
file=$FILEPATH
谢谢!
修改
sed -i -f "s,file=\?,file=$FILEPATH,g"
以上效果很好,我正在寻找但是有没有办法来替换问号?如果我有以下代码:
FILEPATH=/file/path
属性文件:
something=?
file=?
替换产生:
属性文件:
something=?
file=/file/path?
有没有办法完全替换?
?
答案 0 :(得分:5)
我会使用sed:
sed -i "s/file=?/file=$FILEPATH/g" your_file
如果您的$FILEPATH
有/
,请使用其他sed
分隔符,例如:
sed -i "s,file=?,file=$FILEPATH,g"
答案 1 :(得分:1)
不要逃避你的问号
[jaypal:~/Temp] cat temp
file=?
file=?
[jaypal:~/Temp] echo $filepath
/usr/bin
[jaypal:~/Temp] sed -e 's_file=?_file='$filepath'_g' temp
file=/usr/bin
file=/usr/bin
另外,为了进行内联更改,我建议使用以下内容 -
[jaypal:~/Temp] sed -ibak 's_file=?_file='$filepath'_g' temp
[jaypal:~/Temp] ls temp*
temp tempbak
[jaypal:~/Temp] cat temp
file=/usr/bin
file=/usr/bin
[jaypal:~/Temp] cat tempbak
file=?
file=?
这将在进行任何更改之前制作原始文件的备份副本。如果出现任何问题,您将保护原始副本。
答案 2 :(得分:1)
如果你使用Bash,你可以简单地使用Bash内置和替换而不是sed:
#!/bin/bash
FILEPATH="/file/path"
while read line; do
echo "${line/file=\?/${line/\?/}$FILEPATH}"
done < yourfile