첫 번째 열의 텍스트에만 작업하시겠습니까? [복사]

첫 번째 열의 텍스트에만 작업하시겠습니까? [복사]

입력 예:

[email protected] [email protected],[email protected]

예제 출력:

[email protected] [email protected],[email protected]

따라서 "정상적인" 상황에서는 다음을 수행하는 것이 분명히 쉽습니다.

sed 's/.com/.org/g'

하지만 분명히 이 경우에는 첫 번째 열의 접미사에만 작업하고 싶고 두 번째 열은 변경되지 않고 유지되기를 원합니다.

나는 당신이 어떤 도구를 제안하든 상관하지 않습니다. 그러나 나는 추가 설치 없이 표준 Linux에서 사용할 수 있는 것을 선호합니다(즉, sed또는 같은 awk것이 perl바람직할 것입니다 bobsobscuretoolthatneedsinstalling).

답변1

.com의 첫 번째 항목만 으로 바꾸려면 .orgsed 연산자의 기본 동작만 있으면 됩니다 s///. 해당 플래그를 사용하지 마십시오 g.

$ sed 's/.com/.org/' file 
[email protected] [email protected],[email protected]

첫 번째 쉼표로 정의된 필드만 변경하여 첫 번째 필드가 .com줄의 다른 곳에 나타나도 변경되지 않은 상태로 유지하려는 경우 다음을 수행할 수 있습니다.

$ perl -pe 's/^(\S+)\.com/$1.org/' file 
[email protected] [email protected],[email protected]

또는 하위 문자열로 나타나는 경우 com(예 : ) foo.common.net더 안전합니다 .

$ perl -pe 's/^(\S+)\.com\b/$1.org/' file 
[email protected] [email protected],[email protected]

또는 GNU sed에서:

$ sed -E 's/^(\S+)\.com\b/\1.org/' file 
[email protected] [email protected],[email protected]

또는 이식 가능(첫 번째 필드가 첫 번째 필드에 의해 정의된다고 가정)공간탭이나 다른 공백 대신):

$ sed -E 's/^([^ ])\.com /\1.org /' file 
[email protected] [email protected],[email protected]

답변2

$ awk '{ sub("\.com$", ".org", $1); print }' <file
[email protected] [email protected],[email protected]

이는 각 줄의 공백으로 구분된 첫 번째 필드(만)에서 awk일치하는 텍스트를 대체합니다. 출력은 공백으로 구분됩니다.\.com$.org

답변3

로 이를 수행할 수 있습니다 sed. 해당 줄의 첫 번째 단어만 일치하는 정규식을 사용하면 됩니다.

sed -r 's/^(\S+)\.com(\s+)/\1.org\2/'

슬로우 모션, 변경:

  1. 처음부터 하나 이상의 공백이 아닌 문자를 포함하는 시퀀스( ^(\S+))
  2. .com
  3. 공백이 아닌 하나 이상의 시퀀스(마지막 것만 일치시킬 수 있음 .com)

입력하다:

  1. 첫 번째 비공간 시퀀스
  2. .org
  3. 공백의 순서

관련 정보