Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash(bashawk,sed)读取文件并提取引号之间的单词匹配前缀_Bash_Scripting_Sed_Awk_Grep - Fatal编程技术网

使用bash(bashawk,sed)读取文件并提取引号之间的单词匹配前缀

使用bash(bashawk,sed)读取文件并提取引号之间的单词匹配前缀,bash,scripting,sed,awk,grep,Bash,Scripting,Sed,Awk,Grep,我有一个包含(每行一个)的文件。我想从一些模式开始提取引号之间的单词。(在我的例子中,它是C_) 我想提取:PATTERNabcdePATTERNabc 编辑: 我还想在引号之间提取不以$PATTERN开头的单词 sed -rn 's/.*?".*?(PATTERN[^"]*)".*/\1/p' -r-扩展正则表达式 -n-禁用自动打印 *?-零个或多个字符,非贪婪 (-打开捕获组 [^”]-除“ )-关闭捕获组 \1-第一个匹配组 p-打印 我们只是用第一组替换每一行。如果有替换,我们将

我有一个包含(每行一个)的文件。我想从一些模式开始提取引号之间的单词。(在我的例子中,它是C_)

我想提取:
PATTERNabcde
PATTERNabc

编辑:
我还想在引号之间提取不以
$PATTERN
开头的单词

sed -rn 's/.*?".*?(PATTERN[^"]*)".*/\1/p'
  • -r
    -扩展正则表达式
  • -n
    -禁用自动打印
  • *?
    -零个或多个字符,非贪婪
  • -打开捕获组
  • [^”]
    -除
  • -关闭捕获组
  • \1
    -第一个匹配组
  • p
    -打印
我们只是用第一组替换每一行。如果有替换,我们将打印

  • -r
    -扩展正则表达式
  • -n
    -禁用自动打印
  • *?
    -零个或多个字符,非贪婪
  • -打开捕获组
  • [^”]
    -除
  • -关闭捕获组
  • \1
    -第一个匹配组
  • p
    -打印

我们只是用第一组替换每一行。如果有替换,我们将打印。

您可以使用
grep
作为:

grep -Po '(?<=")\s*PATTERN[^"]*(?=")' file

grep-Po'(?您可以使用
grep
作为:

grep -Po '(?<=")\s*PATTERN[^"]*(?=")' file
grep-Po'(?您可以使用awk:

awk -F\" '$2~/^[[:space:]]*PATTERN/{print $2}' file
如果只有一个单词用引号括起来,或者可能以pattern开头的单词始终是第一个单词,则此方法有效;否则,您必须使用for循环:

awk -F\" '{for (i=2;i<=NF;i+=2) if ($i ~/^[[:space:]]*PATTERN/ ) {print $i;next}}'
awk-F\“{for(i=2;i您可以使用awk:

awk -F\" '$2~/^[[:space:]]*PATTERN/{print $2}' file
如果只有一个单词用引号括起来,或者可能以pattern开头的单词始终是第一个单词,则此方法有效;否则,您必须使用for循环:

awk -F\" '{for (i=2;i<=NF;i+=2) if ($i ~/^[[:space:]]*PATTERN/ ) {print $i;next}}'

awk-F\“{for(i=2;虽然它在${PATTERN}abc${PATTERN}ghi上失败,但这很好”它回来了$PATTERNghi@vehom,您没有说每行可以有多个。对不起,我说它以括号之间的$PATTERN开头,这意味着任何东西都可以跟随$PATTERN,包括$PATTERN,只要单词在结束括号之前结束。并且每行只匹配一个单词。我仍然高估了您的答案=)@vehom,你的问题中没有括号。另外,请解释你的sed的一些部分,例如?.?和“.*/\1..谢谢这很好,尽管它在“${PATTERN}abc${PATTERN}ghi”上失败了它回来了$PATTERNghi@vehom,您没有说每行可以有多个。对不起,我说它以括号之间的$PATTERN开头,这意味着任何东西都可以跟随$PATTERN,包括$PATTERN,只要单词在结束括号之前结束。并且每行只匹配一个单词。我仍然高估了您的答案=)@vehom,你的问题中没有括号。另外,请解释你的sed的一些部分,例如?.?和“”。*/\1..谢谢什么括号?你是指引号?什么括号?你是指引号吗?“F\”强制awk使用“作为字段分隔符;然后对于每一行,如果第二个字段(引号中包含的单词标记)以零个或多个空格开头,后跟图案,它将简单地打印出来。-F \“强制awk使用”作为字段分隔符;然后对于每一行,如果第二个字段(用引号括起来的单词)以零个或多个空格开头,后跟图案,它将简单地打印出来。