假设我有一个文件,它只包含一行,其长度可能会有所不同。
This is an example row
我想要:is an example
因此修剪了4个第一个字符和3个最后一个字符。
只需在sh中运行一个命令就可以实现吗?
使用普通POSIXsh
,您可以执行以下操作:
myvar=$(sed -e 's/^....//' -e 's/...$//' input.txt)
有了像bash
或zsh
这样更强大的shell,就可以在不求助于外部程序的情况下完成:
myvar=$(< input.txt)
myvar=${myvar:4:-3}
我假设通过;单一命令";你的意思是一次执行(不排除管道(。
cat test.txt | cut -c5- | rev | cut -c4- | rev
细分:
- 使用cat获取文件的内容
- 只保留第五个字符,直到最后一个带有剪切的字符为止
- 颠倒字符的顺序
- 只保留第四个字符(原始字符串中倒数第四个(直到最后一个字符
- 再次反转
每行修剪前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