Fis*_*der 2 rhel sed regular-expression
我正在编写 sed 命令来查找和替换逗号分隔字符串中的键=值。
文件中的示例字符串: KEY_1=value_1,KEY_2=value_2,SOMEKEY=lastValue
使用的 sed 命令:
sed -r 's/KEY_2=.*?((?=,)|$)/KEY_2=new_value/' myFile.txt
Run Code Online (Sandbox Code Playgroud)
如果 Key 存在,则用新的 key=value 替换它及其值。大多数值将以逗号“,”结尾,但例外情况是字符串中的最后一个 key=value 不会有 ,。
它在 RedHat Linux VM 上给了我以下错误消息
sed:-e 表达式 #1,字符 55:前面的正则表达式无效
我相信这是我尝试的最后一个 '/' /g ,它也是 excptable ,因为原始字符串中不应重复任何键。
该sed
实用程序不支持类似 Perl 的正则表达式。
相反,您可以使用
$ sed 's/KEY_2=[^,]*/KEY_2=new value/' file
KEY_1=value_1,KEY_2=new value,SOMEKEY=lastValue
Run Code Online (Sandbox Code Playgroud)
或者
$ sed 's/\(KEY_2\)=[^,]*/\1=new value/' file
KEY_1=value_1,KEY_2=new value,SOMEKEY=lastValue
Run Code Online (Sandbox Code Playgroud)
或者, with awk
(不使用正则表达式,而是对键使用精确的字符串匹配,以防止在同时使用KEY_2
和时混淆SOME_OTHER_KEY_2
):
$ awk -F, -v OFS=, '{ for (i = 1; i <= NF; ++i)
if (split($i, a, "=") == 2 && a[1] == "KEY_2") {
$i = "KEY_2=new value"
break
} } 1' file
KEY_1=value_1,KEY_2=new value,SOMEKEY=lastValue
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2829 次 |
最近记录: |