使用bash在文件中查找字符串

Mic*_*Tin 2 linux bash

我需要找到匹配一些的字符串regexp pattern并将搜索结果表示为数组,以便用循环迭代它,我需要使用sed吗?一般来说,我想替换一些字符串,但在更换前分析它们.

per*_*eal 6

使用seddiff:

sed -i.bak 's/this/that/' input
diff input input.bak
Run Code Online (Sandbox Code Playgroud)

GNU sed将在替换之前创建备份文件,diff并将向您显示这些更改.但是,如果您不使用GNU sed:

mv input input.bak
sed 's/this/that/' input.bak > input
diff input input.bak
Run Code Online (Sandbox Code Playgroud)

另一种方法使用grep:

pattern="/X"
subst=that
while IFS='' read -r line; do
    if [[ $line = *"$pattern"* ]]; then
        echo "changing line: $line" 1>&2
        echo "${line//$pattern/$subst}"
    else
        echo "$line"
    fi  
done < input > output
Run Code Online (Sandbox Code Playgroud)

  • ...无论如何 - 如果你确定你的答案没有严重的效率或正确性问题,我很乐意删除我和你的+1.更重要的是要突出显示最好的答案,而不是争取谁获得信用.:) (3认同)