如何删除文件中包含超过给定字母数的所有行? E.g。
bear
rabbit
tree
elephant
如果我将其限制为5个字母或更少的字,输出将是:
bear
tree
答案 0 :(得分:17)
$ awk 'length<=5' input.txt
bear
tree
答案 1 :(得分:8)
以下是诀窍:
sed -i '/^.\{5,\}$/d' FILE
这意味着什么:
删除(/ [...] /d
)就地(-i
切换)所有符合以下模式的行:
^
).
)重复5次或以上(\{5,\}
)$
)来自名为FILE
的文件。
答案 2 :(得分:3)
grep -v '......' myfile.txt
将提供五行或更少的字符。
通过“选择”包含六个字符或更多字符的行,然后使用-v
撤消操作来执行此操作,仅打印出不匹配的字符。
答案 3 :(得分:1)
“该文件包含各种外来字符,每个字符都应该算作一个字母。” 假设您的输入数据是UTF8,这个bash过滤器脚本应该这样做。
#!/bin/bash
function px {
local a="$@"
local i=0
while [ $i -lt ${#a} ]
do
printf \\x${a:$i:2}
i=$(($i+2))
done
}
(iconv -f UTF8 -t UTF16 | od -x | cut -b 9- | xargs -n 1) |
if read utf16header
then
px $utf16header
cnt=0
out=''
while read line
do
cnt=$(($cnt+1))
if [ "$line" == "000a" ]
then
if [[ $cnt -le 5+1 ]] ; then
out=$out$line
px $out
fi
cnt=0
out=''
else
out=$out$line
fi
done
fi | iconv -f UTF16 -t UTF8