我想使用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,
或grep
和paste
:
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,