删除文件的前N个字符和后M个字符



假设我有一个文件,它只包含一行,其长度可能会有所不同。

This is an example row

我想要:is an example

因此修剪了4个第一个字符和3个最后一个字符。

只需在sh中运行一个命令就可以实现吗?

使用普通POSIXsh,您可以执行以下操作:

myvar=$(sed -e 's/^....//' -e 's/...$//' input.txt)

有了像bashzsh这样更强大的shell,就可以在不求助于外部程序的情况下完成:

myvar=$(< input.txt)
myvar=${myvar:4:-3}

我假设通过;单一命令";你的意思是一次执行(不排除管道(。

cat test.txt | cut -c5- | rev | cut -c4- | rev

细分:

  1. 使用cat获取文件的内容
  2. 只保留第五个字符,直到最后一个带有剪切的字符为止
  3. 颠倒字符的顺序
  4. 只保留第四个字符(原始字符串中倒数第四个(直到最后一个字符
  5. 再次反转

每行修剪前N个和最后M个字符:

$ awk '{print substr($0,N+1,length-N-M)}' file
$ sed 's/^(.){,N}//;s/(.)^{,M}$//' file

将文件的前N个和最后M个字符修剪为

$ awk '(FNR==1){p=substr($0,N+1);next}{print p; p=$0}END{print substr(p,1,length-M)}' file
$ awk '{p=p ORS $0}END{print substr(p,N+2,length(p)-N-M-1)}' file
$ sed '1s/^(.){,N}//;$s/(.)^{,M}$//' file

相关内容

  • 没有找到相关文章

最新更新