sed 또는 grep을 사용하여 문자열에서 텍스트 조각을 추출하는 데 문제가 있습니다.
내가 사용하는 예제 문자열은 다음과 같습니다.
|a Milton, John, |d 1608-1674.
sed를 사용하여 "John"을 추출할 수 있으며 포럼에 몇 가지 제안이 있습니다.
sed 's/[^,]*,\([^,]*\),.*/\1/'
하지만 저는 "밀턴" 때문에 어려움을 겪고 있습니다.
답변1
줄의 시작 부분이 다음과 같다고 가정하고 |a
패턴을 약간 변경해 보겠습니다 .
$ echo '|a Milton, John, |d 1608-1674.' | sed -E 's/^\|a ([^,]*), *([^,]*),.*/\1/'
Milton
sed -E
백슬래시 없이 그룹화 할 수 있도록 확장 정규식을 사용합니다 (...)
. 그런 다음 선행 |a
및 공백을 일치시키고 그룹에서 다음 쉼표 앞의 모든 항목을 선택하고 ([^,]*),
공백을 무시하고 ␣*
첫 번째 그룹과 동일한 방식으로 다른 그룹을 선택합니다. ,.*
나머지 줄을 다 먹은 후에 는 모두 첫 번째 그룹 \1
(여기 Milton
) 또는 두 번째 그룹 \2
( John
)으로 바꿀 수 있습니다.
물론, |a
이 특정 필드에 무엇이 포함되어 있는지 알려주고 필드의 순서가 다를 수 있는 경우(예 |d ... |a ...
: ) 다른 것이 필요합니다.