sed仅打印字符串中的子字符串

时间:2019-05-22 14:21:25

标签: linux awk sed

我正在尝试在包含大量数据的字符串中获取子字符串。  正则表达式(INC ............)与我试图在https://regexr.com/上获取子字符串的值匹配,但是我无法将子字符串的值转换为变量或打印出来。

此值附近的字符串部分为

......TemplateID2":null,"Incident Number":"INC000006743193","Priority":"High","mc_ueid":null,"Assint......

当我尝试此错误或打印出整个字符串时,出现错误char 26:未知的s选项。

cat /tmp/file1 | sed -n  's/\(INC............\)/\1/p'

cat /tmp/file1 | sed -n 's/./*\(INC............).*/\1/'

2 个答案:

答案 0 :(得分:2)

使用sed,您需要删除字符串前后的内容:

 sed 's/.*\(INC............\).*/\1/' file

但是,如果您的实现支持grep选项,您也可以使用-o

grep -o 'INC............' file

也可以使用Perl:

perl -lne 'print $1 if /(INC............)/' file

答案 1 :(得分:0)

看起来像JSON。如果您在发布前已将{braces}删掉(tsk tsk),则可以使用jq(如果有)。也就是说,该页面需要一些awk!

POSIX(无处不在):

awk 'match($0, /INC[^"]+/) {print substr($0, RSTART, RLENGTH)}' /tmp/file1`

GNU(在GNU / Linux上运行):

gawk 'match($0, /INC[^"]+/, a) {print a[0]}' /tmp/file1

如果每行(GNU)有多个匹配项:

gawk '{while(match($0=substr($0, RSTART+RLENGTH), /INC[0-9]+/, a)) print a[0]}' /tmp/file1