打印行中的第一个数字,后跟制表符和没有数字的行
Print the first number from line followed by tab and the line without the number
我很难用 sed 完成这项任务。
示例输入:
X(996002) dsafsafdsfdsfds dsfdsfds dsfd ds
Y(300342) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
"(1200479) dsfkjdsfhjfds dsfdsj sd "
示例输出:
996002 TAB ) dsafsafdsfdsfds dsfdsfds dsfd ds
300342 TAB ) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
1200479 TAB ) dsfkjdsfhjfds dsfdsj sd "
到目前为止,我有以下 sed:
sed -e 's/^.*\([0-9]*\)\(.*?\)$/ \t /gp' textfile.txt
但我想我不明白如何让它发挥作用。
您可以使用:
sed -i.bak 's/^[^[:digit:]]*\([[:digit:]]\+\)/\t /' file
996002 ) dsafsafdsfdsfds dsfdsfds dsfd ds
300342 ) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
1200479 ) dsfkjdsfhjfds dsfdsj sd "
解释:
-i.bak
- 内联编辑,使用 .bak
扩展名 保存原始文件
^
- 匹配 linse 开始
^[^[:digit:]]\+
- 在开头匹配 1 个或多个非数字
\(...\)
- 将包含的内容分组到捕获组 #1
\([[:digit:]]\+\)
- 在组 #1 中捕获 1 个或多个数字
\t
- 由第 1 组替换,后跟制表符和 space
这对你有用吗?
sed 's/.*(\([^)]*\)/\t/' file
使用您的输入文件:
kent$ cat f
X(996002) dsafsafdsfdsfds dsfdsfds dsfd ds
Y(300342) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
"(1200479) dsfkjdsfhjfds dsfdsj sd "
kent$ sed 's/.*(\([^)]*\)/\t/' f
996002 ) dsafsafdsfdsfds dsfdsfds dsfd ds
300342 ) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
1200479 ) dsfkjdsfhjfds dsfdsj sd "
使用awk
awk -F".[(]" '{sub(/)/,"\t)", );print }' file
996002 ) dsafsafdsfdsfds dsfdsfds dsfd ds
300342 ) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
1200479 ) dsfkjdsfhjfds dsfdsj sd "
我很难用 sed 完成这项任务。
示例输入:
X(996002) dsafsafdsfdsfds dsfdsfds dsfd ds
Y(300342) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
"(1200479) dsfkjdsfhjfds dsfdsj sd "
示例输出:
996002 TAB ) dsafsafdsfdsfds dsfdsfds dsfd ds
300342 TAB ) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
1200479 TAB ) dsfkjdsfhjfds dsfdsj sd "
到目前为止,我有以下 sed:
sed -e 's/^.*\([0-9]*\)\(.*?\)$/ \t /gp' textfile.txt
但我想我不明白如何让它发挥作用。
您可以使用:
sed -i.bak 's/^[^[:digit:]]*\([[:digit:]]\+\)/\t /' file
996002 ) dsafsafdsfdsfds dsfdsfds dsfd ds
300342 ) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
1200479 ) dsfkjdsfhjfds dsfdsj sd "
解释:
-i.bak
- 内联编辑,使用.bak
扩展名 保存原始文件
^
- 匹配 linse 开始^[^[:digit:]]\+
- 在开头匹配 1 个或多个非数字\(...\)
- 将包含的内容分组到捕获组 #1\([[:digit:]]\+\)
- 在组 #1 中捕获 1 个或多个数字
\t
- 由第 1 组替换,后跟制表符和 space
这对你有用吗?
sed 's/.*(\([^)]*\)/\t/' file
使用您的输入文件:
kent$ cat f
X(996002) dsafsafdsfdsfds dsfdsfds dsfd ds
Y(300342) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
"(1200479) dsfkjdsfhjfds dsfdsj sd "
kent$ sed 's/.*(\([^)]*\)/\t/' f
996002 ) dsafsafdsfdsfds dsfdsfds dsfd ds
300342 ) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
1200479 ) dsfkjdsfhjfds dsfdsj sd "
使用awk
awk -F".[(]" '{sub(/)/,"\t)", );print }' file
996002 ) dsafsafdsfdsfds dsfdsfds dsfd ds
300342 ) dsfdsfhdsfhsa dsf;dsjfds f 15 16 .
1200479 ) dsfkjdsfhjfds dsfdsj sd "