텍스트 파일에서 한 줄을 복사하고 수정된 줄을 같은 파일의 줄 끝에 추가합니다.

텍스트 파일에서 한 줄을 복사하고 수정된 줄을 같은 파일의 줄 끝에 추가합니다.

텍스트 파일에서 한 줄을 복사하고 즉시 편집하여 모든 /를 |로 바꾸고 같은 줄의 같은 줄에 붙여넣고 싶습니다.

텍스트 파일의 첫 번째 줄은 다음과 같습니다.

http://webpage.com/(name-never-changes)/aCcboeasdfdRD/asdfasdft21.jpg

(name-never-changes)와 .jpg 사이에 텍스트 복사

/aCcboeasdfdRD/asdfasdft21

/으로 변경 |

|aCcboeasdfdRD|asdfasdft21

그리고 URL이 있는 줄 끝에 구분 기호를 추가하세요. 구분 기호는 텍스트, 숫자 또는 특수 문자일 수 있습니다.

http://webpage.com/(name-never-changes)/aCcboeasdfdRD/asdfasdft21.jpg  (separator)  |aCcboeasdfdRD|asdfasdft21

이는 URL이 다른 여러 텍스트 파일에 대해 작동합니다.

새 파일을 만들고 병합할 수 없습니다. 텍스트 파일의 이름이 다르고 파일 이름을 모르기 때문에 동적이어야 합니다.

답변1

이 시도,

awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' file

http://webpage.com/(name-never-changes)/aCcboeasdfdRD/asdfasdft21.jpg (saperatot) |aCcboeasdfdRD|asdfasdft21
  • /.두 개의 필드 구분 기호
  • $0전체 줄을 인쇄
  • $(NF-2) $(NF-1)마지막에서 세 번째와 두 번째 필드

파일로 저장하고 싶다면

옵션 1:(행이 적은 경우)

echo "`awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' file`" > file

옵션 2:(대용량 파일인 경우)

 awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' file > tempFile ; mv tempFile file

폴더에 여러 파일이 있는 경우:

cd /path/to/dir
for file in `ls`
do
    echo "`awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' $file`" > $file
done

답변2

해결책 은 다음과 같습니다 sed.

sed 'h; s@^[^/]*//[^/]*/[^/]*/@  (separator)  |@; s@/@|@g; s/\.jpg$//; x; G; s/\n//'

단계별:

  • h현재 라인을 "패턴 공간"에서 "예약 공간"으로 복사합니다.
  • s@^[^/]*//[^/]*/[^/]*/@  (separator)  |@에스대체 명령은 구분 기호로 사용됩니다 @. 그것은 대체한다
    물건//물건/물건/
    (즉) 원하시면 할 수 있습니다.http://example.com/(top-level-directory)/  (separator)  |
    s@^http//example.com/(top-level-directory)/@ (separator) |@
  • s@/@|@g또한에스대체 명령은 구분 기호로 사용됩니다 @. /줄의 나머지 모든 문자를 문자로 바꿉니다 |. 확실하다면 ((second-level-directory)그리고(filename)), 생략할 수 있습니다 g.
  • s/\.jpg$//분명히 .jpg확장은 줄 끝에서 제거됩니다. (확장자가 무엇인지 모른다면 비슷한 것을 할 수 있습니다 s/\.[^.]*$//.)
  • x패턴 공간과 홀드 공간을 교환하여 원래 행이 이제 패턴 공간으로 돌아오도록 합니다.
      (분할기)  |(보조 디렉토리)|(파일 이름)
    우리가 방금 만든 것은 화물칸에 위치해 있습니다.
  • G Gets는 공간의 내용을 유지하고 이를 패턴 공간에 추가합니다(그 사이에 개행 문자 삽입).
  • s/\n//개행 문자를 제거합니다.

그러면 빈 줄이 빈 줄로 전달됩니다. 다른 라인은 파괴됩니다.

파일을 그 자리에서 편집하려면 sed옵션을 전달하면 됩니다 -i(또는 -i.bak시스템에서 요구하는 경우).

관련 정보