我想在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”我想从文件中删除。
我可以添加什么,允许我使用考虑到我当前脚本的非法单词列表来执行此操作。
答案 0 :(得分:0)
您可以创建一个文件,列出您的非法字符串并遍历文件行,使用正则表达式从输入中删除每个字符串,如this。
答案 1 :(得分:0)
在行“split -l 8”之前$ file.txt“tags-”我建议您使用以下内容清理$ file.txt:
sef -f sedscript <"$file.txt" >tempfile
sedscript是您事先创建的包含所有不需要的字符串的文件,例如
s/>_<//g
s/:o//g
您可以将split命令更改为使用tempfile。
在我的PC上尝试使用stdin / stdout表明sed脚本中的多个匹配项在输入文件的相同传递中执行。因此文件很大,这个appraoch避免多次读取文件。
这种方法的另一个变体是:
sed -e s/>_<//g -e s/:o//g <infile >outfile
重复
-e s/xxx//g
根据需要多次选择。