Linux Unix Shell中特定数量的字符后剪切字符串

Linux Unix Shell中特定数量的字符后剪切字符串,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我有一个字符串/文件,其中包含一些需要使用API邮寄的数据。但它不允许消息长度大于N 现在我想把文件的内容删减到N个字符 假设该文件的内容如下所示: 2020-09-28 03:13:41,288 ERROR [.] [main]: java.lang.NullPointerException java.lang.NullPointerException 2020-09-28 03:13:41,298 ERROR [.] [main]: java.lang.NullPointerExcepti

我有一个字符串/文件,其中包含一些需要使用API邮寄的数据。但它不允许消息长度大于N

现在我想把文件的内容删减到N个字符

假设该文件的内容如下所示:

2020-09-28 03:13:41,288 ERROR [.] [main]: java.lang.NullPointerException java.lang.NullPointerException 
2020-09-28 03:13:41,298 ERROR [.] [main]: java.lang.NullPointerException java.lang.NullPointerException
at com.myPackage.anotherPackage.DoSomething.processSomeData(MagicallyPullData.java:98)
at com.myPackage.anotherPackage.DoSomething.processSomeData(MagicallyPullData.java:56) 
at com.myPackage.anotherPackage.DoSomething.processSomeData(MagicallyPullData.java:112)
我想在今天的约会中得到50个字符

[main]: java.lang.NullPointerException java.lang.NullPointerException 
所以今天的日期模式应该匹配,但日期不应该包括在内,整个字符串应该缩小到50个字符

我写了以下内容

cat /home/myproject/logs/errors.log | grep "`date --date='today' '+%Y-%m-%d'`"
但这给出了所有有今天日期的行


此脚本将是一个每天运行的cron作业。

使用
cut-d'-f2-
删除日期,然后通过管道将其传输到
头-c50
以获取前50个字节:

grep "`date --date='today' '+%Y-%m-%d'`" /home/myproject/logs/errors.log | cut -d' ' -f2- | head -c50

作为<代码> > GRP<代码> +>代码>剪切< /代码>,考虑AWK。

awk-v ddmmyy=“$(日期+%Y-%m-%d)””$1==ddmmyy{
打印substr($0,1,50)}'/home/myproject/logs/errors.log
如果您只需要今天日期第一次出现的前50个字符,只需添加
;退出
,在右括号之后,右大括号之前


如果只希望文本从字符位置35向前,请将第二个参数更改为
substr
1
更改为
35

欢迎使用StackOverflow!这不仅仅意味着“今天的日期有50个字符”。是否只需要第一行,匹配的第一行,每行上匹配日期后的前50个字符?请说得更具体些。您可以使用
sed s//
从匹配的行中删除前导日期,并使用
head-c 50
仅获取前50个字符。对不起,我的英语不好。对于匹配今天日期的第一行,从时间后开始的50个字符。这也是我的工作,但我标记为答案的那一行更适合我的要求。感谢您抽出时间回答我的问题。