如何删除文件中包含超过给定数量字母的所有行?例如
bear
rabbit
tree
elephant
如果我将其限制为 5 个字母或更少的单词,输出将是:
bear
tree
- 该文件包含各种外来字符,每个外来字符都应计为一个字母。
- 标点符号也可以算作一个字母。
如何删除文件中包含超过给定数量字母的所有行?例如
bear
rabbit
tree
elephant
如果我将其限制为 5 个字母或更少的单词,输出将是:
bear
tree
$ awk 'length<=5' input.txt
bear
tree
以下方法可以解决问题:
sed -i '/^.\{5,\}$/d' FILE
这意味着:
删除 ( / [...] /d
) 就地 ( -i
switch ) 与以下模式匹配的所有行:
^
).
) 重复 5 次或更多次 ( \{5,\}
)$
)从名为FILE
.
grep -v '......' myfile.txt
将提供五个字符或更少的行。
它通过“选择”包含六个或更多字符的行来执行此操作,然后使用-v
, 反转操作以仅打印出不匹配的行。
“该文件包含各种外来字符,每个都应算作一个字母。” 假设您的输入数据是 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