假设我有一个看起来像这样的文件:
abc2 1 def2 3 abc2
123 zy
cd eabc1d rq12345 cd
a a
a1a a1
我想检查一行中的第一个单词是否等于最后一个单词,以及是否要执行某些操作....如何编写此正则表达式以检查它们是否相等? :/
sed '/if_firstword_eq_lastword/do_something/'
只有SLE PLEASEE
TNX
答案 0 :(得分:4)
使用awk。
$ awk '$1==$NF' file
abc2 1 def2 3 abc2
cd eabc1d rq12345 cd
a a
通过sed,
$ sed -n '/^ *\([^[:space:]]\+\)\b.* \1 *$/p' file
abc2 1 def2 3 abc2
cd eabc1d rq12345 cd
a a
正则表达式说明:
^
- 断言我们刚开始。
<space>*
- 匹配零个或多个空格字符。
\(...\)
- 被称为捕获组。与捕获组内存在的模式匹配的字符将存储在相应的组索引内。我们稍后可以通过反向引用来引用这些字符。
[^[:space:]]
匹配非空格字符。 [^[:space:]]\+
匹配一个或多个非空格字符。 \([^[:space:]]\+\)
现在匹配的字符被第一个捕获组捕获。
\b
称为单词边界,它在单词字符和非单词字符之间匹配。这会强制[^[:space:]]\+
与上例中的空格匹配。
.*
匹配任何字符零次或多次。
<space>\1
,\1
这里指的是组索引1中的字符。<space>\1
确保在第一个字符之前必须存在空格。
<space>*
匹配零个或多个空格。
$
断言我们到底。 p>
请注意,如果输入包含除空格字符以外的非单词字符,则上述sed可能会失败。