簡體   English   中英

從bash中的文本文件中刪除特定單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM