繁体   English   中英

sed 检索部分行

[英]sed retrieve part of line

我有如下代码行:

hi:12345:234 (第二行)

如何使用仅打印出第二行中的第二项的 sed 命令编写一行代码?

我当前的命令如下所示:

sed -n '2p' file获取第二行,但我不知道使用什么正则表达式仅匹配第二项 '12345' 并与我当前的命令结合

您能否尝试使用 GNU sed中显示的示例进行跟踪、编写和测试。

sed -n '2s/\([^:]*\):\([^:]*\).*/\2/p' Input_file

说明:使用sed-n选项将停止所有行的打印,并且仅对我们明确提到要打印的p选项的那些行进行打印(稍后在代码中)。 然后提到2s意味着仅在第 2 行执行替换。 然后使用正则表达式和sed的能力将匹配的正则表达式存储到临时缓冲区中,稍后可以通过编号1,2...and so on来检索值。 正则表达式基本上是捕获第一次出现之前的第一部分:然后是第一次出现之后的第二部分:直到第二次出现:根据 OP 的要求。 因此,在进行替换时,提及/2将根据请求将整行替换为存储在缓冲区中的第二个值,然后提及p将仅在第二行打印该部分。

几个解决方案:

echo "hi:12345:234" | sed -n '2s/.*:\([0-9]*\):.*/\1/p'
echo "hi:12345:234" | sed -n '2{s/^[^:]*://; s/:.*//p; q}'
echo "hi:12345:234" | awk -F':' 'FNR==2{print $2}'

全部显示12345

sed -n '2s/.*:\([0-9]*\):.*/\1/p'由于-np选项/标志,仅显示捕获的值。 它匹配两个冒号之间捕获数字的整个字符串, \1仅保留捕获。

sed -n '2{s/^[^:]*://;s/:.*//p;q}'删除从开始到第一个:的所有内容,从第二个到结束的所有内容,然后退出( q ) 所以如果你的文件很大,它会被更快地处理。

awk -F':' 'FNR==2{print $2}'用冒号分割第二行并获取第二项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM