Bash 从文本文件中删除,UTF 8

Bash 从文本文件中删除,UTF 8,bash,utf-8,Bash,Utf 8,我使用这个BASH脚本将文本从一个文本文件过滤到另一个文本文件。文本以UTF8编码 #!/bin/bash mid=$1 infile="/var/www/tmp/textgrid_uploads/${mid}.txt" outfile="/home/var/www/vids/$mid/${mid}_textgrid.mlf" tmpfile="/home/var/www/vids/$mid/${mid}.tmp" i=1 touch $tmpfile cat $infile | grep

我使用这个BASH脚本将文本从一个文本文件过滤到另一个文本文件。文本以UTF8编码

#!/bin/bash
mid=$1
infile="/var/www/tmp/textgrid_uploads/${mid}.txt"
outfile="/home/var/www/vids/$mid/${mid}_textgrid.mlf"
tmpfile="/home/var/www/vids/$mid/${mid}.tmp"

i=1

touch $tmpfile

cat $infile | grep "text =" | cut -d '"'  -f2 | tr -d ',' | tr -d '.' |  tr -d ':' |  tr -d ';' |  tr -d '!' | tr -d '?' > $tmpfile
#| awk '{ print tolower($0) }'

#cat $infile  | grep -v "<" | egrep -v '^[[:space:]]*$' | tr -d '.' | tr -d "," | tr -d ";" | tr -d ":" | tr -d "^" | tr -d '#' | tr -d '?' | tr -d '!' | tr -d '%' | tr -d '@' | tr -d '*' | tr -d '~' | grep -v '((xxxxx))' | awk '{ print tolower($0) }' > $tmpfile

#cat $infile | grep -v 'WEBVTT' | grep -v "\--" | grep -v '^$' | sed 's/?/./g' | sed 's/!/./g' | tr -d '.' | tr -d "," | tr -d ";" | tr -d ":" | awk '{ print tolower($0) }' > $tmpfile

nlines=$(cat $tmpfile | wc -l)

echo "#!MLF!#" >> $outfile
echo "\"*/dummyfile.lab\"" >> $outfile


while [ $i -le $nlines ]
do
        line=$(cat $tmpfile | sed $i'q;d') #zobrazi konkretny riadok
        printf '%s\n' $line | sed '/^\s*$/d' | cut -d "/" -f1 | egrep -v '^[[:space:]]*$' >> $outfile #zapis po riadkoch s odstranenim znaciek
        i=$[$i+1] #pocitadlo
done
echo "."  >> $outfile

rm $tmpfile
此脚本的输出为:

#!MLF!# 
"*/dummyfile.lab"  
<feff> V utorok o devätnástej bude vo fejs

我想删除带有两个括号的第一个单词feff。请给我一个完整的例子如何做。我是Bash新手,我只是使用这个脚本,而不是创建它。谢谢各位

我假设您不能仅仅更改创建输入文件的内容,而不首先写入BOM?如果它实际上是BOM,那么它将位于文件的第一个位置偏移零。dd if=input\U file of=output\U file skip=3将过滤掉它。@wildplasser您能给我举一个使用它的示例吗?我试过了/bin/bash dd if=infle of=outfile skip=3但不起作用。