SED - 다른 행의 일부 콘텐츠를 사용하여 행 생성

SED - 다른 행의 일부 콘텐츠를 사용하여 행 생성

내 폴더에 파일이 몇개 있어요

각 파일의 구조는 다음과 같습니다.

...
product: Nike New Awesome Shoe
price: 123
color: black
...

다음 시나리오를 완료해야 합니다.단일 SED 명령 사용, *.txt를 사용하는 모든 파일에서

기본적으로 패턴으로 시작하는 줄에서 패턴 다음의 첫 번째 단어를 가져와 새 줄에서 "brand:"와 연결해야 합니다.

(product: )로 시작하는 줄을 선택하세요. (product: ) 뒤의 첫 번째 단어를 가져옵니다. Brand:를 다른 줄의 첫 번째 단어와 연결하는 새 줄을 만듭니다.

추신: 줄 번호로 인해 파일이 변경될 수 있으므로 줄 번호가 없습니다.

...
product: Nike New Awesome Shoe
brand: Nike
price: 123
color: black
...

답변1

를 사용하면 sed일치 항목을 복사하고 원하는 문자열을 유지할 수 있습니다.

$ sed '/^product/{p;s/[^ ]* \([^ ]*\).*/brand: \1/;}' input_file
...
product: Nike New Awesome Shoe
brand: Nike
price: 123
color: black
...

답변2

다음을 사용할 수 있습니다.

sed 's/^product: \([^ ]*\) .*/&\
brand: \1/' file.txt

^product:다음으로 시작하는 줄과 일치합니다.제품:

\([^ ]*\)다음 단어를 인용해 보세요product:

&백슬래시와 줄 바꿈을 사용하여 전체 일치 항목(이 경우 전체 줄)을 삽입하고 brand:첫 번째 인용 \1단어부터 시작하여 줄 바꿈을 추가합니다.

답변3

데이터가 YAML 파일이라고 가정합니다.

$ cat file 
product: Nike New Awesome Shoe
price: 123
color: black
$ yq -y '.brand = (.product|split(" ")[0])' file
product: Nike New Awesome Shoe
price: 123
color: black
brand: Nike

이것은 yq에서 온 것입니다python-yq 스스로 만든macOS 또는 Linux의 패키지는 다음 위치에서도 제공됩니다.https://kislyuk.github.io/yq/

이 표현식은 product문자열을 가져와 공백으로 분할합니다. 결과 단어 중 첫 번째 단어가 key 에 할당됩니다 brand.

Mike Farah의 를 사용했다면 yq다음과 같이 했을 것입니다.

$ yq '.brand = (.product|split(" ")|.[0])' file
product: Nike New Awesome Shoe
price: 123
color: black
brand: Nike

답변4

나는 다음을 사용할 것이다 awk:

awk '/^product:/{print $0; print "price:",$2; next;}1' file

관련 정보