我有一个文件,要使用cat修改为新文件。 因此,该文件包含以下行:
name "myName"
place "xyz"
以此类推。...
我希望将这些行更改为
name "Jon"
place "paris"
我试图这样做,但是不起作用:
cat originalFile | sed 's/^name\*/name "Jon"/' > tempFile
我尝试使用各种特殊字符,但没有用。我无法识别名称后的空格字符,然后是“ myName”。
答案 0 :(得分:2)
您可以使用[[:blank:]]
匹配行的其余部分,也可以使用空格或[[:space:]]
或sed 's/^\(name[[:space:]]\).*/\1"Jon"/;s/^\(place[[:space:]]\).*/\1"paris"/' originalFile > tempFile
来匹配空格:
\1
请注意,这里有两个与s分号连接的replace命令。第一部分包装了一个捕获组,这是必需的,因为空格POSIX字符类不是文字的,并且为了在替换s='name "myName"
place "xyz"'
sed 's/^\(name[[:space:]]\).*/\1"Jon"/;s/^\(place[[:space:]]\).*/\1"paris"/' <<< "$s"
后向引用后保留它,应该使用它(插入用组1捕获的文本)。
请参见online demo:
name "Jon"
place "paris"
输出:
{{1}}
答案 1 :(得分:0)
另一种awk
:
awk '$1=="name"{$0="name \"Jon\""} $1=="place"{$0="place \"paris\""} 1' originalFile
当name
或place
之前有空格时,它将起作用。
这里不是正则表达式匹配,而只是字符串比较。
awk
用空格字符分隔字段,其中包括\n
或。
当结果对您来说正确时,在其上附加> tempFile
。