如何使用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 可能会失败。
假设我有一个如下所示的文件 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 可能会失败。