내부적으로 이 작업을 수행해야 하는 각 텍스트 파일의 위치 목록이 있습니다.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 ;;'
이는 두 가지 표현식으로 구성됩니다 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
옵션을 사용하여 파일의 별도 스트림을 가져와야 합니다.
또는 줄 바꿈으로 구분된 파일 이름을 읽고 하나씩 작업하고 백업을 만듭니다.
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