sed命令/ shell脚本读取特定行并在需要时更新它

时间:2015-10-15 05:07:27

标签: sh

我有一个文件,其内容类似如下。

name: MyName
age: 25
subject: Math

此文件需要更新为:

name: MyName
age: "25"
subject: Math

但条件是,sed命令/ shell脚本可以多次运行。但是,双引号必须只添加一次。

我为它写了一个脚本并且它有效。想找到一个更简单的解决方案。

#!/bin/bash
FILE="myfile"
while IFS='' read -r line || [[ -n "$line" ]]; do
    if [[ $line  =~ 'age:' ]]
    then
        if ! [[ $line  =~ 'age: "' ]]
        then
            sed 's/\(age:[[:blank:]]*\)\(.*\)/\1"\2"/' -i $FILE
        fi
    fi
done < $FILE

1 个答案:

答案 0 :(得分:2)

你可以使用这个稍微修改过的正则表达式从命令行运行sed,它将与你的脚本具有相同的效果

sed -i 's/\(age:[[:blank:]]\+\)\([^"].*\)/\1"\2"/' file

如果空格后面的第一个字符是双引号,则不会匹配,这是您的脚本检查的内容。

测试它,它适用于我。