我在这方面还是新手。我想问一下,如何逆切?
例子;
./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
作为对上面接受的答案的补充,您可以使用命令替换将其组合cut
并sed
替换为单个命令。
仅当您知道要删除的名称中的字符位置,或者可以有问题地找出这些值时,此方法才有效。
name="./24feb/frfr"
cut_start=3
cut_end=4
echo "${name}" | sed "s/$(echo "${name}" | cut -c${cut_start}-${cut_end})//"
./二月/frfr
作为旁注......通常'
用于sed
,但在这种情况下,您应该使用"
来允许扩展命令替换。