[英]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'
由于-n
和p
选项/标志,仅显示捕获的值。 它匹配两个冒号之间捕获数字的整个字符串, \1
仅保留捕获。
sed -n '2{s/^[^:]*://;s/:.*//p;q}'
删除从开始到第一个:
的所有内容,从第二个到结束的所有内容,然后退出( q
) 所以如果你的文件很大,它会被更快地处理。
awk -F':' 'FNR==2{print $2}'
用冒号分割第二行并获取第二项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.