Regex 如何使用sed比较一行中的第一个单词和最后一个单词?
假设我有一个文件F1,看起来像这样:Regex 如何使用sed比较一行中的第一个单词和最后一个单词?,regex,unix,sed,Regex,Unix,Sed,假设我有一个文件F1,看起来像这样: abc2 1 def2 3 abc2 123 zy cd eabc1d rq12345 cd a a a1a a1 我想检查一行中的第一个单词是否等于最后一个单词,以及它是否用于做某事……我如何编写这个正则表达式来检查它们是否相等/ sed '/if_firstword_eq_lastword/do_something/' 唯一的快乐 tnx使用awk $ awk '$1==$NF' file abc2 1 def2 3 abc2 cd eabc1d
abc2 1 def2 3 abc2
123 zy
cd eabc1d rq12345 cd
a a
a1a a1
我想检查一行中的第一个单词是否等于最后一个单词,以及它是否用于做某事……我如何编写这个正则表达式来检查它们是否相等/
sed '/if_firstword_eq_lastword/do_something/'
唯一的快乐
tnx使用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:]\+\)
现在匹配的字符由第一个捕获组捕获
\b
称为单词边界,匹配单词字符和非单词字符。这将强制[^[:space:]\+
与上例中的空格匹配
*
与任何字符零次或多次匹配
\1
,\1
这里指的是组索引1中的字符<代码>\1确保第一个字符前必须有空格
*
匹配零个或多个空格
$
断言我们已经走到了尽头
请注意,如果输入包含除空格字符以外的非单词字符,则上述sed可能会失败。使用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:]\+\)
现在匹配的字符由第一个捕获组捕获
\b
称为单词边界,匹配单词字符和非单词字符。这将强制[^[:space:]\+
与上例中的空格匹配
*
与任何字符零次或多次匹配
\1
,\1
这里指的是组索引1中的字符<代码>\1确保第一个字符前必须有空格
*
匹配零个或多个空格
$
断言我们已经走到了尽头
请注意,如果输入包含除空格字符以外的非单词字符,上述sed可能会失败。+1对于awk答案,就是这样!我不明白为什么这应该是sed-dependent,因为它太复杂了。@AvinashRaj这是个伟大的人!你能解释一下正则表达式是什么意思吗?我是说它的不同部分?我认为这是正确的答案:)@nickshmick你的教授教你一些无用的东西。你永远不会用sed来做这个,这是awk的工作。如果行中只有一个单词,sed解决方案将失败,而awk解决方案不会,sed解决方案将只适用于某些sed,而awk解决方案将适用于任何awk(当然,旧的、坏的awk除外)。@EdMorton我想我可以同意我现在将以这种方式使用它,但这就是它在学校的工作方式。+1对于awk答案,这就是路!我不明白为什么这应该是sed-dependent,因为它太复杂了。@AvinashRaj这是个伟大的人!你能解释一下正则表达式是什么意思吗?我是说它的不同部分?我认为这是正确的答案:)@nickshmick你的教授教你一些无用的东西。你永远不会用sed来做这个,这是awk的工作。如果行中只有一个单词,sed解决方案就会失败,而awk解决方案不会,sed解决方案只能与一些sed一起工作,而awk解决方案可以与任何awk一起工作(当然,旧的、坏的awk除外)。@EdMorton我想我可以同意我现在将以这种方式使用它,但这就是它在学校的工作方式。。