从bash中删除文本文件中的特定单词

时间:2016-11-16 19:45:18

标签: bash debian

我想在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”我想从文件中删除。

我可以添加什么,允许我使用考虑到我当前脚本的非法单词列表来执行此操作。

2 个答案:

答案 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

根据需要多次选择。