リストの各ファイルの上部と下部に;;を追加します。

リストの各ファイルの上部と下部に;;を追加します。

内部的には、これを行う必要がある各テキストファイルの場所のリストがあります。add.txt

たとえば、内部にadd.txt次の内容があります。

/root/QuestDiary/MapQuest_Def/Mon_Umyounkijang.txt
/root/Market_Def/06Inn_SamakwAr-5.txt

そのリストの各テキストファイルを開き、各ファイルの上下に;;を追加するスクリプトが必要です。また、大文字でファイル/フォルダを開く必要があり、ファイル/root/Market_Def/06Inn_SamakwAr-5.txtに一覧表示されますが、実際のファイル名は次のとおりです。/root/Market_DEF/06Inn_SamakWar-5.txt

06Inn_SamakWar-5.txt現在は次のとおりです。

%100
+40
+1

[@main]
#IF
checkpkpoint 2

#SAY
#INCLUDE [..\Convert_Def\Market_Def\01Meet_BichonSung-10.txt] @Convert_01Meet_BichonSung-10_0


#ELSESAY
#INCLUDE [..\Convert_Def\Market_Def\01Meet_BichonSung-10.txt] @Convert_01Meet_BichonSung-10_1

[@buy]

#SAY
#INCLUDE [..\Convert_Def\Market_Def\01Meet_BichonSung-10.txt] @Convert_01Meet_BichonSung-10_2

[@sell]

#SAY
#INCLUDE [..\Convert_Def\Market_Def\01Meet_BichonSung-10.txt] @Convert_01Meet_BichonSung-10_3

[Goods]

Jerk 1000 1

[@TalkToQuest]
#CALL [NPCQuest_Def\02Weapon_BichonSung-10.txt] @NPCQuest_Check

[@everythingreward]
#CALL [System\TotalRewardSystem.txt] @TotalRewardSystem

それに変更する必要があります

;;
%100
+40
+1

[@main]
#IF
checkpkpoint 2

#SAY
#INCLUDE [..\Convert_Def\Market_Def\01Meet_BichonSung-10.txt] @Convert_01Meet_BichonSung-10_0


#ELSESAY
#INCLUDE [..\Convert_Def\Market_Def\01Meet_BichonSung-10.txt] @Convert_01Meet_BichonSung-10_1

[@buy]

#SAY
#INCLUDE [..\Convert_Def\Market_Def\01Meet_BichonSung-10.txt] @Convert_01Meet_BichonSung-10_2

[@sell]

#SAY
#INCLUDE [..\Convert_Def\Market_Def\01Meet_BichonSung-10.txt] @Convert_01Meet_BichonSung-10_3

[Goods]

Jerk 1000 1

[@TalkToQuest]
#CALL [NPCQuest_Def\02Weapon_BichonSung-10.txt] @NPCQuest_Check

[@everythingreward]
#CALL [System\TotalRewardSystem.txt] @TotalRewardSystem

;;

答え1

GNUの使用sed:

sed -e '1i ;;' -e '$a ;;'

これは2つの式で構成されていますsed

  • 1i ;;最初の行()の前に()を挿入するi(挿入された改行);;1

  • $a ;;最後の行(a)の後に()を追加します(挿入された改行);;$

例:

$ cat foo.txt
sdas
adas

$ sed -e '1i ;;' -e '$a ;;' foo.txt 
;;
sdas
adas
;;

にすべてのファイルがあるため、add.txtファイル名に文字IFS(デフォルトではスペース、タブ、改行)またはワイルドカード(*、、、)が含まれていないと仮定すると、次のようにファイルを編集して?拡張子をバックアップとして指定できます。ファイル:[].bak

sed -i.bak -e '1i ;;' -e '$a ;;' -- $(cat add.txt)

バックアップなし:

sed -i -e '1i ;;' -e '$a ;;' $(cat add.txt)

これを使用すると、-iファイルは単一のストリームではなく個別にインポートされるため、これは良い方法です。それ以外の場合は、-iこの-sオプションを使用してファイルの別々のストリームを取得する必要があります。

または、改行で区切られたファイル名を読み取り、1つずつ作業してバックアップを作成します。

while IFS= read -r f; do sed -i.bak -e '1i ;;' -e '$a ;;' -- "$f"; done <add.txt

バックアップなし:

while IFS= read -r f; do sed -i -e '1i ;;' -e '$a ;;' -- "$f"; done <add.txt

答え2

そしてcat

cat <( echo ";;" ) /path/to/inputfile <( echo ";;" )

ファイルのリストがある場合は、次のものを使用できます。

while read file; do
   scratchfile=$(mktemp)
   cat <( echo ";;" ) "$file" <( echo ";;" ) > $scratchfile
   mv -f "$scratchfile" "$file"
done < /path/to/file.list

findたとえば、リストを提供するコマンドがある場合は、次のものを使用できます。

IFS="\n"
for file in $( /some/command ); do
   scratchfile=$(mktemp)
   cat <( echo ";;" ) "$file" <( echo ";;" ) > $scratchfile
   mv -f "$scratchfile" "$file"
done

関連情報