regex - php脚本中的Bash命令,根据特定列的值获取文件的某些行

标签 regex linux bash shell grep

通过 php 脚本中的 linux bash 命令(grep + regex + 另一个命令?),我想根据某些条件获取文件的行,请参见下文:

文件示例:

"id_line1","value_line1_column2","foo blablabla","value_line1_column4" 
"id_line2","value_line2_column2","blablabla foo","value_line2_column4"
"id_line3","value_line3_column2","blabla foo blabla","value_line3_column4"
"id_line4","value_line4_column2","blablabla","value_line4_column4"
"id_line5","value_line5_column2","fooblabla bla","value_line5_column4"
"id_line6","value_line6_column2","blabla blafoo","value_line6_column4"
"id_line7","value_line7_column2","blabla foobla bla","value_line7_column4" 

我只想搜索文件中的第 X 列(本例中的第三列)。

正则表达式

在文件所有行的第三列中,我想找到包含搜索单词的字符串:(通过 grep + regex ?)

  • 位于特定列的字符串开头(在示例中为第三列)
  • OR 位于特定列的字符串末尾(在示例中为第三列)
  • 或特定列的字符串中的某个位置(在示例中为第三列)

并且仅查找未与其他单词连接的单词。例如,在上面的示例文件中,如果我搜索单词“foo”:

"id_line1","value_line1_column2","foo blablabla","value_line1_column4" // the regex must return true
"id_line2","value_line2_column2","blablabla foo","value_line2_column4" // the regex must return true
"id_line3","value_line3_column2","blabla foo blabla","value_line3_column4" // the regex must return true
"id_line4","value_line4_column2","blablabla","value_line4_column4" // the regex must return false
"id_line5","value_line5_column2","fooblabla bla","value_line5_column4" // the regex must return false
"id_line6","value_line6_column2","blabla blafoo","value_line6_column4" // the regex must return false
"id_line7","value_line7_column2","blabla foobla bla","value_line7_column4" // the regex must return false 

结果

命令必须返回行:

"id_line1","value_line1_column2","foo blablabla","value_line1_column4"
"id_line2","value_line2_column2","blablabla foo","value_line2_column4"
"id_line3","value_line3_column2","blabla foo blabla","value_line3_column4"

我该怎么做? 如果我只能获取 id ("id_line1", "id_line2", "id_line3") 那就完美了:)

最佳答案

awk 会完成这项工作:

awk -F, '$3 ~ /"foo / || $3 ~ / foo"/ || $3 ~ /[[:blank:]]foo[[:blank:]]/ { print $0 }' filename

这里我们检查由 分隔的每行的第三部分,并检查“foo 或(由 || 表示)空格,然后是 foo,然后是另一个空格,最后是 foo”。如果发生任何这些情况,请打印该行

关于regex - php脚本中的Bash命令,根据特定列的值获取文件的某些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44984701/

相关文章:

mysql - 如何在 MySQL 正则表达式中引用捕获组?

python - 如何创建美元货币的正则表达式?

java - replaceAll 不替换字符串

c -/usr/bin/xfce4-terminal 的执行给出 "Session manager variable not defined"

bash - 将参数存储到带空格的变量中

bash - 在 Maemo 中运行 bash shell

javascript - 正则表达式(替换所有非数字字符并强制执行 2 个小数位数字)

linux - MADV_DONTNEED 在 mmap() 之后立即执行任何有用的操作吗?

linux - IP添加路由不起作用

git - 如何从 bash 脚本中监听 webhooks?