使用 grep 或其他方式匹配数字 1 而不是 10 或 11
Match number 1 and not 10 or 11 using grep or other way
我有一个包含以下内容的文件:
image_0001.jpg 0
image_1212.jpg 0
image_1324.jpg 1
image_1784.jpg 1
image_7867.jpg 10
image_1919.jpg 11
我想找到一种方法来只获取与第二列中的数字匹配的行:
如果我要求“0”那么只会得到:
image_0001.jpg
image_1212.jpg
如果我要求“1”,那么只会得到:
image_1324.jpg
image_1784.jpg
有没有办法使用 grep 或 awk 来做到这一点?到目前为止,当我用 grep 查找“1”时,我得到的是 10 和 11
的行
你可以使用 awk。
$ awk '=="1"{print }' file
image_1324.jpg
image_1784.jpg
仅当第 2 列的值恰好为 1
.
时,才会打印第 1 列的值
或
$ awk -v var="1" '==var{print }' file
image_1324.jpg
image_1784.jpg
您可以通过 -v
参数传递要检查的值。
使用单词边界\b
:
grep '\b0\b' input
要仅获取文件名,请对第一列使用 cut
:
grep '\b0\b' input | cut -f1 -d' '
可能是手头任务的更好选择 ,但是 如果您确实想使用 grep
and 你正在使用 GNU grep
,你可以试试这个:
grep -Po '^.+(?= 0$)' in # this looks for '0'
-P
打开对 PCRE(Perl 兼容的正则表达式)的支持
-o
只输出每行匹配的部分
(?= 0$)
使用先行断言来匹配行尾的 0
;因为它是一个断言,它不会包含在匹配中,所以只打印文件名。
如果您有 BSD grep(例如,在 OSX 上),其中 -P
因此前瞻断言不可用,请使用 使用 cut
.
在单独的步骤中提取文件名
我有一个包含以下内容的文件:
image_0001.jpg 0
image_1212.jpg 0
image_1324.jpg 1
image_1784.jpg 1
image_7867.jpg 10
image_1919.jpg 11
我想找到一种方法来只获取与第二列中的数字匹配的行:
如果我要求“0”那么只会得到:
image_0001.jpg
image_1212.jpg
如果我要求“1”,那么只会得到:
image_1324.jpg
image_1784.jpg
有没有办法使用 grep 或 awk 来做到这一点?到目前为止,当我用 grep 查找“1”时,我得到的是 10 和 11
的行你可以使用 awk。
$ awk '=="1"{print }' file
image_1324.jpg
image_1784.jpg
仅当第 2 列的值恰好为 1
.
或
$ awk -v var="1" '==var{print }' file
image_1324.jpg
image_1784.jpg
您可以通过 -v
参数传递要检查的值。
使用单词边界\b
:
grep '\b0\b' input
要仅获取文件名,请对第一列使用 cut
:
grep '\b0\b' input | cut -f1 -d' '
grep
and 你正在使用 GNU grep
,你可以试试这个:
grep -Po '^.+(?= 0$)' in # this looks for '0'
-P
打开对 PCRE(Perl 兼容的正则表达式)的支持-o
只输出每行匹配的部分(?= 0$)
使用先行断言来匹配行尾的0
;因为它是一个断言,它不会包含在匹配中,所以只打印文件名。
如果您有 BSD grep(例如,在 OSX 上),其中 -P
因此前瞻断言不可用,请使用 cut
.