首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在文件中查找与给定值匹配的正则表达式

在文件中查找与给定值匹配的正则表达式
EN

Stack Overflow用户
提问于 2017-01-16 02:18:25
回答 6查看 130关注 0票数 2

我对在grep (bash)中使用正则表达式有一些基础知识。但是我想以另一种方式使用正则表达式。

例如,我有一个包含以下条目的文件:

代码语言:javascript
运行
复制
line_one=[0-3]
line_two=[4-6]
line_three=[7-9]

现在,我想使用bash来确定某个特定数字与哪一行匹配。例如:

代码语言:javascript
运行
复制
grep 8 file

应返回:

代码语言:javascript
运行
复制
line_three=[7-9]

注意:我知道"grep 8文件“的例子没有意义,但我希望它能帮助理解我想要实现的目标。

谢谢你的帮助,马塞尔

EN

回答 6

Stack Overflow用户

发布于 2017-01-16 03:06:11

正如其他人指出的那样,awk是实现这一目标的正确工具:

awk -F'=' '8~$2{print $0;}' file

..。如果你想让这个工具看起来更像grep,一个快速的bash包装器:

代码语言:javascript
运行
复制
#!/bin/bash
awk -F'=' -v seek_value="$1" 'seek_value~$2{print $0;}' "$2"

它的运行方式如下:

代码语言:javascript
运行
复制
./not_exactly_grep.sh 8 file
line_three=[7-9]
票数 3
EN

Stack Overflow用户

发布于 2017-01-16 03:09:25

这可以在原生bash中使用语法[[ $value =~ $regex ]]来测试:

代码语言:javascript
运行
复制
find_regex_matching() {
  local value=$1
  while IFS= read -r line; do         # read from input line-by-line
    [[ $line = *=* ]] || continue     # skip lines not containing an =
    regex=${line#*=}                  # prune everything before the = for the regex
    if [[ $value =~ $regex ]]; then   # test whether we match...
      printf '%s\n' "$line"           # ...and print if we do.
    fi
  done
}

...used as:

代码语言:javascript
运行
复制
find_regex_matching 8 <file

...or,要使用您的示例输入内联来测试它:

代码语言:javascript
运行
复制
find_regex_matching 8 <<'EOF'
line_one=[0-3]
line_two=[4-6]
line_three=[7-9]
EOF

...which正确地发出:

代码语言:javascript
运行
复制
line_three=[7-9]

如果愿意,您可以将printf '%s\n' "$line"替换为printf '%s\n' "${line%%=*}",以便仅打印密钥(=之前的内容)。有关所涉及语法的概要,请参阅the bash-hackers page on parameter expansion

票数 2
EN

Stack Overflow用户

发布于 2017-01-16 03:01:31

我的第一印象是,这不是grep的任务,可能是awk的任务。

尝试使用grep执行某些操作时,我只看到以下内容:

代码语言:javascript
运行
复制
for line in $(cat file); do echo 8 | grep "${line#*=}" && echo "${line%=*}" ; done

使用while读取文件(以下备注):

代码语言:javascript
运行
复制
while IFS= read -r line; do echo 8 | grep "${line#*=}" && echo "${line%=*}" ; done < file
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41664616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档