我尝试对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
但是如何做替换的事情却很困难。有人可以帮忙吗?
答案 0 :(得分:3)
试试这一行:
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;
答案 1 :(得分:0)
你可以使用这样的东西:
s/(name:\{id:)[^,]*,(.*)(alias: )([^;]*)/\1\4,\2\3\4/g
答案 2 :(得分:0)
sed 's/name:{id:[a-z],+(.*)alias: ([a_z]+)/name:{id:\2,\1/alias: \1/
我告诉你未经测试的,一些控制字符可能需要被转义。您可以调整[a-z]+
以匹配您的别名匹配。