Bash - 搜索和追加字符串

时间:2011-11-29 19:01:28

标签: linux bash

如果我想在文件中搜索一行并在该行的末尾添加一个字符串,我该怎么办呢?即:

file=?

我想搜索file=?并用文件路径替换问号。文件路径位于变量$FILEPATH

file=$FILEPATH

谢谢!

修改

sed -i -f "s,file=\?,file=$FILEPATH,g"

以上效果很好,我正在寻找但是有没有办法来替换问号?如果我有以下代码:

FILEPATH=/file/path

属性文件:

something=?
file=?

替换产生:

属性文件:

something=?
file=/file/path?

有没有办法完全替换?

3 个答案:

答案 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