2015-10-15 151 views
2

我有一个文件,其内容类似如下。sed命令/ shell脚本读取特定行并在需要时进行更新

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 

回答

2

您可以运行从这个稍微改变正则表达式的命令行sed的,它会为你的脚本相同的效果

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

它不会赛后如果第一个字符空格是一个双引号,这是你的脚本检查的内容。

经过测试,它适用于我。

+0

是的,工作就像一个魅力。谢谢 – Chetan