我试图处理我的文字。 比如我得到了:
asdf asdf get.this random random get.that
get.it this.no also.this.no
我想要的输出是:
get.this get.that
get.it
所以regexp应该只捕获这种模式(得到。\ w),但它必须递归地执行它,因为一行中有多个出现,所以sed最简单的方法
sed 's/.*(REGEX).*/\1/'
不起作用(仅显示第一次出现)。 可能好的方法是使用grep -o,但我有旧版本的grep和-o标志不可用。
答案 0 :(得分:1)
此grep
可能会满足您的需求:
grep -o "get[^ ]*" file
答案 1 :(得分:1)
尝试awk:
awk '{for(i=1;i<=NF;i++){if($i~/get\.\w+/){print $i}}}' file.txt
您可能需要针对特定问题调整斜杠之间的正则表达式。样本输出:
$ awk '{for(i=1;i<=NF;i++){if($i~/get\.\w+/){print $i}}}' file.txt
get.this
get.that
get.it
答案 2 :(得分:1)
使用awk:
awk -v patt="^get" '{
for (i=1; i<=NF; i++)
if ($i ~ patt)
printf "%s%s", $i, OFS;
print ""
}' <<< "$text"
的bash
while read -a words; do
for word in "${words[@]}"; do
if [[ $word == get* ]]; then
echo -n "$word "
fi
done
echo
done <<< "$text"
perl的
perl -lane 'print join " ", grep {$_ =~ /^get/} @F' <<< "$text"
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed -r '/\bget\.\S+/{s//\n&\n/g;s/[^\n]*\n([^\n]*)\n[^\n]*/\1 /g;s/ $//}' file
或者如果你想要每行一个:
sed -r '/\n/!s/\bget\.\S+/\n&\n/g;/^get/P;D' file