我只需要grep具有一定长度的行,还可以包括换行符/换行符。因此第一行比另一个行长一个字符。
示例:
"Random text with certain length\n"
"Random text with certain length"
EOF
我使用grep的方式如下:
grep -E "^.{length}$"
由于两行都是相同的字符数,因此将它们打印出来,因为它不会将\ n视为字符
感谢任何想法。
答案 0 :(得分:1)
TL; DR
对我来说,获得建议结果的最简单方法是在将管道换成grep(即折叠)之前,用sed替换换行符。然后,如有必要,展开。
$ echo -e '"Random text with certain length\n"\n"Random text with certain length"\n' | sed -e ':a;N;$!ba;s/\n"/+"/g' -e '/"+/s//"\n/g' | grep -E "^.{33}$"
"Random text with certain length"
$ echo -e '"Random text with certain length\n"\n"Random text with certain length"\n' | sed -e ':a;N;$!ba;s/\n"/+"/g' -e '/"+/s//"\n/g' | grep -E "^.{34}$"
"Random text with certain length+"
$ echo -e '"Random text with certain length\n"\n"Random text with certain length"\n' | sed -e ':a;N;$!ba;s/\n"/+"/g' -e '/"+/s//"\n/g' | grep -E "^.{34}$" | sed -e '/+"/s//\n"/g'
"Random text with certain length
"
感谢澄清说明。以下内容参考了先前的描述,但是似乎很浪费删除...
我不确定我是否完全理解并做出了一些假设。
wc
。否则,grep
和 wc
都不会不认为行长相同。 换句话说,如上所述,默认情况下,grep
不会将换行符(\ n)视为字符,而是将回车符(\ r)视为字符,而wc
会将两者都视为字符
这肯定\ n =换行($)和\ r =回车(^ M)
\ n =换行符
$ echo -en '\n' | wc -c
1
$ echo -en '\n' | grep -E "^.{1}" | wc -c
0
\ r =回车
$ echo -en '\r' | wc -c
1
$ echo -en '\r' | grep -E "^.{1}" | wc -c
2
对于grep
,回车符是一个额外的字符。 不是换行符。
这将为两行产生相同的字符数和结果。
echo -en '\n' | sed -e '/\r/s///g' | grep -E "^.{1}" | wc -c
0
echo -en '\r' | sed -e '/\r/s///g' | grep -E "^.{1}" | wc -c
0
鉴于要按行长过滤的条件,grep -E
本身绝不会将换行符/ LF视为字符,因此不能这样做。另一个示例,其中两行在视觉上都是 相同的长度,但实际上不是 相同的长度...
$ echo -e 'hello\r\nworld\n'
hello
world
$ cat <<< "$(echo -e 'hello\r\nworld\n' | grep -E "^.{5}$")"
world
$ cat <<< "$(echo -e 'hello\r\nworld\n' | grep -E "^.{6}$")"
hello
...并将sed
插入到管道中,两行的长度相等,为{5}:
$ cat <<< "$(echo -e 'hello\r\nworld\n' | sed -e '/\r/s///g' | grep -E "^.{5}$")"
hello
world
$ cat <<< "$(echo -e 'hello\r\nworld\n' | sed -e '/\r/s///g' | grep -E "^.{6}$")"
<no output>
答案 1 :(得分:0)
假设您已将内容保存到名为file.txt的文件中,则可以尝试如下操作:
cat file.txt | awk 'length($0) > 38
仅输出长度大于38个字符的行:
"Random text with certain length\n" <br>
如果您这样做:
cat a.txt | awk 'length($0) > 37'
然后显示两行,因为它们都有37个字符...
首先不确定那是不是您想要的...还是尝试一下!