sed 또는 grep 정규식 문제

sed 또는 grep 정규식 문제

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 ...: ) 다른 것이 필요합니다.

관련 정보