关于使用 awk 的 sed 进行文本格式化的问题

关于使用 awk 的 sed 进行文本格式化的问题

我想使用awk或格式化文本sed。我的文字看起来像,

H1 (dxfault)
H337 (Unxr)
H1106 (hast)
H1129 (h1129)
H1370 (hlan1370)

我想删除这封信H以及之后的所有内容第一个空间,并且格式数字看起来像1,337,1106,1129,1370

我发现了两个不同的sed选择

第一的:

sed 'y/H/ /' #for removing H letter in front 

第二:

sed 's/\s.*$//' #for removing everything after first break "space" 

如何组合这些命令并在数字后添加逗号?

答案1

您可以使用sed仅获取数字并将paste行与,分隔符合并:

sed -E 's/^H([0-9]*).*$/\1/' file | paste -sd,

greppaste

grep -Po '^H\K[0-9]*' file | paste -sd,
grep -o '^H[0-9]*' file |  cut -c 2- | paste -sd,

你可以,与交换换行符sed,但我认为paste更容易。

答案2

或者sed/grep使用tr

$ sed -E 's/H([0-9]+).*/\1/' file | tr '\n' ,

$ grep -o '[0-9]\+\s' file | tr -s '\n ' ,
  • tr '\n' ,用逗号替换换行符
  • tr -s '\n ' ,用一个逗号替换换行符和空格

答案3

我已经通过以下方法完成了

sed -e "s/H//g" -e "s/\s.*//g" filename | perl -pne "s/\n/,/g"| sed "s/,$//g"

输出

1,337,1106,1129,1370

答案4

使用sed,假设可以使用任何字符,但只有 1 个空格....

sed -E "s/^H(.+) .*$/\1/g" filename | paste -sd,

我宁愿选择grep允许任何字符并提取匹配,直到找到第一个空格

grep -Po "(?<=^H)[^ ]*" filename | paste -sd,

相关内容