[英]Remove specific words from a text file in bash
我想从bash中的txt文件中删除特定单词。 这是我当前的脚本:
echo "Sequenzia Import Tag Sidecar Processor v0.2"
echo "=============================================================="
rootfol=$(pwd)
echo "Selecting files from current folder........"
images=$(ls *.jpg *.jpeg *.png *.gif)
echo "Converting sidecar files to folders........"
for file in $images
do
split -l 8 "$file.txt" tags-
for block in tags-*
do
foldername=$(cat "$rootfol/$block" | tr '\r\n' ' ')
FOO_NO_EXTERNAL_SPACE="$(echo -e "${foldername}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
mkdir "$FOO_NO_EXTERNAL_SPACE" > /dev/null
cd "$FOO_NO_EXTERNAL_SPACE"
done
mv "$rootfol/$file" "$file"
cd "$rootfol"
rm tags-* $file.txt
done
echo "DONE! Move files to import folder"
它的作用是读取与图像相同的txt文件,并创建在导入到Sequenzia图像板(基于myimoutobooru)期间被解释为标签的文件夹( https://code.acr.moe/kazari/ sequenzia )。 我想做的是从sidecar文件中删除特定的单词(实际上有符号组合),以便它们不会导致导入过程中的问题。
我想从文件中删除“> _ <”和“:o”之类的组合。
考虑到我当前的脚本,我可以添加些什么,使我可以使用非法单词列表进行此操作。
您可以创建其中列出了您的非法串的文件,并通过文件的行迭代,使用正则表达式来删除您输入像每一个这个 。
我建议您在“ split -l 8“ $ file.txt”标签-”行之前使用以下方法清理$ file.txt:
sef -f sedscript <"$file.txt" >tempfile
sedscript是您事先创建的文件,其中包含所有不需要的字符串,例如
s/>_<//g
s/:o//g
您可以将split命令更改为使用tempfile。
在我的PC上使用stdin / stdout进行实验表明,sed脚本中的多个匹配项是在输入文件的同一遍中执行的。 因此是文件很大,这种方法避免了多次读取文件。
这种方法的另一个变体是:
sed -e s/>_<//g -e s/:o//g <infile >outfile
重复
-e s/xxx//g
根据需要选择多次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.