명령줄에서 파일의 각 줄 시작 부분에 문자열을 추가하는 가장 쉬운 방법은 무엇입니까?

명령줄에서 파일의 각 줄 시작 부분에 문자열을 추가하는 가장 쉬운 방법은 무엇입니까?

각 줄의 시작 부분에 문자열을 추가하는 방법을 찾고 있습니다(각 줄에 동일한 문자열 사용). 사용자 정의할 수는 없지만 기억하기 쉽고 모든 POSIX 호환 플랫폼(및 모든 셸)에서 사용할 수 있습니다.

답변1

:|paste -d'foo ' - - - - input > output

(농담입니다. 여기에 게시된 모든 솔루션 중에서 가장 빠른 솔루션을 찾을 수도 있습니다. :-b).

정식 방법은 다음과 같습니다.

sed 's/^/foo /' < input > output

그러나 임의의 문자열에는 쉽게 적용할 수 없습니다. 예를 들어,

sed "s/^/$var /"

, 또는 개행 문자를 $var포함하지 않는 경우에만 유효하며 최소한 GNU sed의 임의 명령 실행 취약점이 보장되지 않습니다.&\/

이와 관련하여,

export var
awk '{print ENVIRON["var"], $0}'

또는

perl -pe '$_="$ENV{var} $_"'

더 잘 작동할 것입니다.

답변2

당신은 그것을 사용할 수 있습니다 sed:

sed -i 's/^/your_string /' your_file

의견을 주신 Stephane과 Marco에게 감사드립니다. 이 -i옵션은 POSIX가 아닙니다. 위 작업을 수행하는 POSIX 방법은 다음과 같습니다.

sed 's/^/your_string /' your_file > tmp_copy && mv tmp_copy your_file

또는 perl:

perl -pi -e 's/^/your_string /' your_file

설명하다

두 명령 모두 정규식 대체를 수행하여 ^줄의 시작 부분( )을 원하는 문자열로 바꿉니다. 두 명령의 스위치는 -i파일이 그 자리에서 편집되도록 보장합니다(즉, 변경 사항이 표준 출력으로 인쇄되지 않고 파일에 반영됩니다).

sed모든 POSIX 호환 운영 체제에서 작동해야 하며, perl다음을 제외한 대부분의 최신 Unix에서 작동해야 합니다.이미 열심히 일했어삭제하세요.

답변3

awk나는 접두사 문자열 "foo"를 사용하여 솔루션을 생각해 냈습니다 .

awk '{ print "foo", $0; }' input > output

awk크로스 플랫폼이며 모든 POSIX 시스템에서 사용할 수 있습니다. 내부 편집은 수행되지 않습니다. 두 번째 파일을 만들지 않고 한 파일을 편집하려면 임시 파일을 사용해야 합니다. sed구문을 보여주는 Joseph의 답변을 참조하십시오 . 또 다른 트릭은 기본적으로 원본 파일과 동일한 파일 이름을 가진 임시 파일을 생성하는 다음 구문을 사용하는 것입니다.

{ rm file; awk '{ print "foo", $0 }' > file; } < file

답변4

perl이를 수행하려면 다음 방법을 사용할 수 있습니다 .

$ perl -pi -e 's/^/mystring /' afile.txt

샘플 파일을 만듭니다.

$ seq 5 > afile.txt

$ cat afile.txt
1
2
3
4
5

위 명령을 실행합니다.

$ perl -pi -e 's/^/mystring /' afile.txt

$ cat afile.txt
mystring 1
mystring 2
mystring 3
mystring 4
mystring 5

관련 정보