通过 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/