목록의 각 파일 상단과 하단에 ;;를 추가하세요.

목록의 각 파일 상단과 하단에 ;;를 추가하세요.

내부적으로 이 작업을 수행해야 하는 각 텍스트 파일의 위치 목록이 있습니다.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

관련 정보