删除第 3 个字符等于数字的行
Delete lines where 3rd character equals a number
我有一个一致的文件,其中包含
这样的数字
0123456
0234566
.
.
.
etc
使用 bash 工具,最好使用命令行,如果第三位数字等于 2
我如何删除每一行。
例如,使用 cut -c3
我可以获得正确的数字,但我无法将它与 sed
或类似的东西有效地结合起来。我不是在寻找模式,只是在寻找第 3 个数字。
(我在 python 中的脚本中完成了它,但我想知道它是如何通过单行 bash 命令完成的)。谢谢!
编辑: 此外,如果我想删除第三个数字不等于 2
的行(相反的问题)
您只需使用 sed
即可
sed -i '/^..2/d' file
如果你想做相反的事情,你可以这样做:
sed -i '/^..[^2]/d' file
因为你正在处理一个特定的字符。
我会使用 awk
:
$ awk -F "" '!=2' file
0234566
通过将字段分隔符设置为 ""
(空,仅在 GNU-awk 上有效),每个字符都存储在不同的字段中。然后,说 != 2
检查第 3 个字符是否不是 2,如果是,则打印该行。
或使用纯 bash,使用 Using shell parameter expansion ${parameter:offset:length}
:
while IFS= read -r line
do
[ "${line:2:1}" != "2" ] && echo "$line"
done < file
我有一个一致的文件,其中包含
这样的数字0123456
0234566
.
.
.
etc
使用 bash 工具,最好使用命令行,如果第三位数字等于 2
我如何删除每一行。
例如,使用 cut -c3
我可以获得正确的数字,但我无法将它与 sed
或类似的东西有效地结合起来。我不是在寻找模式,只是在寻找第 3 个数字。
(我在 python 中的脚本中完成了它,但我想知道它是如何通过单行 bash 命令完成的)。谢谢!
编辑: 此外,如果我想删除第三个数字不等于 2
的行(相反的问题)
您只需使用 sed
sed -i '/^..2/d' file
如果你想做相反的事情,你可以这样做:
sed -i '/^..[^2]/d' file
因为你正在处理一个特定的字符。
我会使用 awk
:
$ awk -F "" '!=2' file
0234566
通过将字段分隔符设置为 ""
(空,仅在 GNU-awk 上有效),每个字符都存储在不同的字段中。然后,说 != 2
检查第 3 个字符是否不是 2,如果是,则打印该行。
或使用纯 bash,使用 Using shell parameter expansion ${parameter:offset:length}
:
while IFS= read -r line
do
[ "${line:2:1}" != "2" ] && echo "$line"
done < file