내 폴더에 파일이 몇개 있어요
각 파일의 구조는 다음과 같습니다.
...
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