删除第 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