regex - 在 bash 中用空格分隔一个完整的单词

标签 regex unix awk grep

假设我有这些数据:

hi helo tmp#100000 bye
100000 hi bye
hi 100000 bye

100000 在变量中:$var 我只想 grep 100000 作为一个完整的单词,所需的输出:

100000 hi bye
hi 100000 bye

我已经尝试了所有在 StuckOverflow 中得到解答的东西,但似乎没有任何效果: grep "\b$var\b", grep -E "[[:blank:]]$var[[:blank:]]" 等等。 我认为问题可能出在 # 中。 该解决方案需要适用于变量等于: hi.*bye 作为正则表达式的情况。

请帮忙

最佳答案

使用 awk 的非正则表达式搜索:

awk -v var="$var" '
{for (i=1; i<=NF; ++i) if ($i == var) {print; break}}' file
100000 hi bye
hi 100000 bye

否则使用自定义 FS 的 awk 更短:

awk -F "(^|[[:blank:]])$var([[:blank:]]|$)" 'NF > 1' file

关于regex - 在 bash 中用空格分隔一个完整的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64249030/

相关文章:

c# - OrderedDictionary 和正则表达式

java - 使用unix语法运行java类文件?

bash - 将与模式匹配的行移动到上一行

ios - 带有正则表达式捕获的 NSPredicate 总是得到 0 结果

java - 用正则表达式替换字符串

javascript - 如何从 FTP 地址获取基本 url?

linux - 如何移动相对符号链接(symbolic link)?

shell - 查看文件是否已更改

awk - 在特定范围内使用 AWK 找到最大值和最小值

shell - awk 是一种编程语言还是只是一种工具?