用于删除一行前 N 个字符的 unix 命令是什么?

问题描述 投票:0回答:7

例如,我可能想要:

tail -f logfile | grep org.springframework | <command to remove first N characters>

我想

tr
可能有能力做到这一点,但我不确定。

bash unix command truncate
7个回答
510
投票

使用

cut
。 例如。删除每行的前 4 个字符(即从第 5 个字符开始):

tail -f logfile | grep org.springframework | cut -c 5-

64
投票
sed 's/^.\{5\}//' logfile 

然后用你想要的数字替换 5...它应该可以解决问题...

编辑 如果对于每一行

sed 's/^.\{5\}//g' logfile

54
投票

您可以使用

cut

cut -c N- file.txt > new_file.txt

-c:
字符

file.txt:
输入文件

new_file.txt:
输出文件

N-:
N 到结尾的字符将被剪切并输出到新文件。

还可以有其他参数,例如: 'N' 、 'N-M' 、 '-M' 分别表示第 n 个字符、第 n 到 m 个字符、第一个到 m 个字符。

这将对输入文件的每一行执行操作。


11
投票
x=hello

echo ${x:1}

返回你好

根据需要将 1 替换为 N


9
投票
tail -f logfile | grep org.springframework | cut -c 900-

将删除前 900 个字符

cut
使用 900- 显示到行尾的第 900 个字符

但是,当我通过 grep 将所有这些都通过管道传输时,我什么也没得到


6
投票

这是简单的函数,在 bash 中测试。函数的第一个参数是字符串,第二个参数是要删除的字符数

function stringStripNCharsFromStart {
    echo ${1:$2:${#1}}
}

用法

$ stringStripNCharsFromStart "12abcdefgh-" 2
# 2abcdefgh-

截图

Screenshot of result from console


4
投票

我认为

awk
将是最好的工具,因为它既可以过滤又可以在过滤的行上执行必要的字符串操作函数:

tail -f logfile | awk '/org.springframework/ {print substr($0, 6)}'

tail -f logfile | awk '/org.springframework/ && sub(/^.{5}/,"",$0)'
© www.soinside.com 2019 - 2024. All rights reserved.