内部的には、これを行う必要がある各テキストファイルの場所のリストがあります。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