如何进行逆切?

如何进行逆切?

我在这方面还是新手。我想问一下,如何逆切?

例子;

./24feb/frfr

我希望在 cut 命令之后,结果将是./feb/frfr.

怎么做?

答案1

% echo ./24feb/frfr | cut -c 1-2,5-
./feb/frfr

那将是cut -c 3-4,即输出所有字符 (字节与当前版本的 GNU 相比,cut除了第三行和第四行之外的每一行。

GNU 实现cut也有一个--complement选项:

cut --complement -c 3-4

要删除第一个十进制数字序列,您可以使用sed

sed 's/[0-9]\{1,\}//'

要删除它,仅当它位于第三位置时:

sed 's/^\(..\)[0-9]*/\1/'

或者非常明确什么模式应该触发删除:

sed 's|^\(./\)[0-9]*\([[:lower:]]\{3\}/\)|\1\2|'

这只是删除了<0-or-more-digits>一行中的匹配:./<0-or-more-digits><3-lowercase-letters>/<anything>

答案2

这是不可能的。剪切依赖于字段分隔符的可用性。在您的示例所需的输入中,没有可以用作字段分隔符的字符。除非您对输入格式有更多的控制,否则剪切不是完成这项工作的工具。这可以通过 sed 或 awk 来实现。例如,在 sed 中它将是:

sed 's/[0-9]//g'

答案3

作为对上面接受的答案的补充,您可以使用命令替换将其组合cutsed替换为单个命令。

仅当您知道要删除的名称中的字符位置,或者可以有问题地找出这些值时,此方法才有效。

name="./24feb/frfr"
cut_start=3
cut_end=4

echo "${name}" | sed "s/$(echo "${name}" | cut -c${cut_start}-${cut_end})//"

./二月/frfr

作为旁注......通常'用于sed,但在这种情况下,您应该使用"来允许扩展命令替换。

相关内容