regex - 使用sed将字符串逐行替换为正则表达式

标签 regex command-line sed

我尝试对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/

相关文章:

python - 从 HTML 页面提取数据 (Python)

java - 字符串比较逻辑未按预期工作

JavaScript:提取字符串中出现的所有正则表达式

linux - 有效的赋值运算符 Bash

xml - 使用Shell脚本从xml获取元素并将其存储在数组中

regex - 如何使用 winmerge 行过滤器忽略包含特定单词的行?

Windows 命令行 - 将文件修改时间戳更改为较早的日期时间

Linux Shell 脚本递归求幂

perl - 将 2 行合并为 1

ubuntu - 将星期几添加到文本文件中的日期