我想知道如何提取这两种模式之间的所有单词:****_
和_****
。下划线表示空格。
到目前为止,我已经完成了:
awk '/^**** / {flag=1;next} / ****$/{flag=0} flag {print}'
文件的一部分
.
.
.
**** Hoja de vida ****
Nombre
Nombre en citaciones
Nacionalidad
**** Formación Académica ****
.
.
.
答案 0 :(得分:3)
以下应该做。请注意,*
需要转义。请注意,此解决方案包含开始和结束模式
awk '/^\*\*\*\* /,/ \*\*\*\*$/' file
如果您需要排除开始和结束模式
awk '/^\*\*\*\* /,/ \*\*\*\*$/{if ($0 !~ /^\*\*\*\* | \*\*\*\*$/)print}' file
或sed
稍微简洁一点sed -n '/^\*\*\*\* /,/ \*\*\*\*$/{/^\*\*\*\* \| \*\*\*\*$/!p}' file
答案 1 :(得分:2)
您的答案有两个主要问题。首先不是逃避元字符*
。第二个 最初没有显示您的示例输入文件。 :)
由于你想在模式之间抓取单词,你可以这样做:
awk 'gsub(/\*\*\*\*/,"")==2 && $1=$1' file
gsub
函数返回所做的替换次数。由于我们对****
之间的行感兴趣,因此我们检查了2. $1=$1
是为了确保输出中没有前导和尾随空格。
答案 2 :(得分:0)
您可以尝试使用可选的空格分隔4 *:
echo '**** Hoja de vida ****' | awk -F' *\\*\\*\\*\\* *' '{print $2}'
Hoja de vida