입력 예:
[email protected] [email protected],[email protected]
예제 출력:
[email protected] [email protected],[email protected]
따라서 "정상적인" 상황에서는 다음을 수행하는 것이 분명히 쉽습니다.
sed 's/.com/.org/g'
하지만 분명히 이 경우에는 첫 번째 열의 접미사에만 작업하고 싶고 두 번째 열은 변경되지 않고 유지되기를 원합니다.
나는 당신이 어떤 도구를 제안하든 상관하지 않습니다. 그러나 나는 추가 설치 없이 표준 Linux에서 사용할 수 있는 것을 선호합니다(즉, sed
또는 같은 awk
것이 perl
바람직할 것입니다 bobsobscuretoolthatneedsinstalling
).
답변1
.com
의 첫 번째 항목만 으로 바꾸려면 .org
sed 연산자의 기본 동작만 있으면 됩니다 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/'
슬로우 모션, 변경:
- 처음부터 하나 이상의 공백이 아닌 문자를 포함하는 시퀀스(
^(\S+)
) .com
- 공백이 아닌 하나 이상의 시퀀스(마지막 것만 일치시킬 수 있음
.com
)
입력하다:
- 첫 번째 비공간 시퀀스
.org
- 공백의 순서