如何使用sed比较一行中的第一个词和最后一个词?

how to compare first word in a line with the last word using sed?

假设我有一个如下所示的文件 F1:

abc2 1 def2 3 abc2
123 zy
 cd eabc1d rq12345 cd
a a
a1a a1

我想检查一行中的第一个词是否等于最后一个词,如果是做某事....我如何编写这个正则表达式来检查它们是否相等? :/

sed '/if_firstword_eq_lastword/do_something/'

仅 SED 请看

tnx

使用 awk。

$ awk '==$NF' file
abc2 1 def2 3 abc2
 cd eabc1d rq12345 cd
a a

通过sed,

$ sed -n '/^ *\([^[:space:]]\+\)\b.*  *$/p' file
abc2 1 def2 3 abc2
 cd eabc1d rq12345 cd
a a

正则表达式解释:

^ - 断言我们在开始。

<space>* - 匹配零个或多个 space 个字符。

\(...\) - 称为捕获组。与捕获组中存在的模式匹配的字符将存储在相应的组索引中。稍后我们可以通过反向引用来引用这些字符。

[^[:space:]] 匹配非 space 字符。 [^[:space:]]\+ 匹配一个或多个非 space 字符。 \([^[:space:]]\+\)现在匹配的字符被第一个捕获组捕获。

\b 称为单词边界,匹配单词字符和非单词字符。这会强制 [^[:space:]]\+ 匹配上例中的 space。

.* 匹配任意字符零次或多次。

<space>,</code>这里指的是group index 1里面的字符。<code><space>确保第一个字符之前必须有一个space。

<space>* 匹配零个或多个 spaces.

$ 断言我们到了最后。

请注意,如果输入包含 space 个字符以外的非单词字符,上述 sed 可能会失败。