저는 sed를 배우고 있으므로 이 경우 "line"이라는 단어의 두 번째 항목을 바꾸려고 합니다. 그래서 다음 명령을 내립니다.
(zet:pc:~/text) sed 's/line/LINUX/2' mytextfile
this is line 1
this is line 2
this is line 3
this is line 4
this is line 5
그러나 출력에서 "sed"가 두 번째로 나타나는 world "line"을 대체하지 않는다는 것을 알 수 있습니다. 그렇다면 제가 여기서 실수를 하고 있는 걸까요?
답변1
s/../../2
각 줄에서 두 번째 항목을 바꿉니다.
파일을 다음과 같이 읽으면하나철사:
GNU 사용 sed
:
sed -z 's/line/LINUX/2' mytextfile
정상적인 상황에서 sed
:
tr '\n' '\0' < mytextfile | sed 's/line/LINUX/2' | tr '\0' '\n'
이렇게 하면 잘못된 결과가 생성됩니다.높은너무 가능하지 않음이 파일의 경우이미널 바이트를 포함합니다.
두 번째 줄의 첫 번째 항목을 바꾸려면 다른 답변을 참조하십시오 :-)
답변2
파일에서 두 번째 항목은 두 번째 줄에 있으므로 필요한 것은 다음과 같습니다.
sed '2s/line/LINUX/' mytextfile
파일을 그 자리에서 편집하려면:
sed -i '2s/line/LINUX/' mytextfile
두 번째 줄 에서 2s
변경이 이루어집니다. line
명령은 문자열이 하나 이상의 줄에 여러 번 나타나는 경우 에만 작동합니다.
답변3
라인 구문 분석의 경우 "s" 명령 앞에 라인 번호를 언급해야 합니다.
$ echo "this is line 1
this is line 2
this is line 3
this is line 4
this is line 5" | sed -e '2s/line/LINUX/'
this is line 1
this is LINUX 2
this is line 3
this is line 4
this is line 5
따라서 귀하를 위한 명령은 다음과 같습니다.
sed -e '2s/line/LINUX/' mytextfile
예, 줄 번호에 관계없이 전체 파일에서 두 번째 항목만 바꾸려는 경우 pLumo의 대답은 정확합니다.
sed -z 's/line/LINUX/2' mytextfile