我尝试对clex文件进行一些操作,格式如下:
name:{id:xxx, ... ...} alias: aaa;
name:{id:yyy, ... ...} alias: bbb;
name:{id:zzz, ... ...} alias: ccc;
我需要做的是将名称后面的内容替换为别名后面的内容。所以结果应该是:
name:{id:aaa, ... ...} alias: aaa;
name:{id:bbb, ... ...} alias: bbb;
name:{id:ccc, ... ...} alias: ccc;
可以使用sed来完成操作吗?我尝试使用正则表达式但失败了。 然后我尝试使用for循环:
readarray lines < "$file"
for line in "${lines[@]}";
do
???
done
但是对于如何进行替换感到很困惑。有人可以帮忙吗?
最佳答案
尝试这一行:
sed -r 's/(name:\{id:)[^,]*(.*alias: )([^;]*);/\1\3\2\3;/' file
使用您的示例数据:
kent$ echo "name:{id:xxx, ... ...} alias: aaa;
name:{id:yyy, ... ...} alias: bbb;
name:{id:zzz, ... ...} alias: ccc;"|sed -r 's/(name:\{id:)[^,]*(.*alias: )([^;]*);/\1\3\2\3;/'
name:{id:aaa, ... ...} alias: aaa;
name:{id:bbb, ... ...} alias: bbb;
name:{id:ccc, ... ...} alias: ccc;
关于regex - 使用sed将字符串逐行替换为正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15244214/