file.txt에서 각 줄의 첫 번째 문자 앞에 경로를 추가하고 이러한 편집 내용이 포함된 동일한 파일을 저장하려면 어떻게 해야 합니까? [복사]

file.txt에서 각 줄의 첫 번째 문자 앞에 경로를 추가하고 이러한 편집 내용이 포함된 동일한 파일을 저장하려면 어떻게 해야 합니까? [복사]

다음과 같은 줄이 포함된 파일이 있습니다.

account_1
account_2 
account_3

각 줄 앞에 경로를 추가 /home/info/하고 다음과 같은 업데이트를 사용하여 동일한 파일을 저장해야 했습니다.

/home/info/account_1
/home/info/account_2 
/home/info/account_3

AIX에서 이 문제를 어떻게 처리합니까?

답변1

파일의 각 줄 시작 부분에 문자열을 추가하려면 다음을 사용할 수 있습니다.

sed -i 's#^#/home/info/#' file

그러면 호출된 파일의 내부 편집이 수행되고 각 줄의 시작 부분에 file문자열이 삽입됩니다 ./home/info/

FreeBSD 또는 파생 제품(예: macOS)에서는 -i ''대신 사용해야 합니다 -i("sed -i(제자리에서 편집)를 사용하여 이식성을 달성하는 방법은 무엇입니까?").

#대체 텍스트에 포함되어 있으므로 여기서는 표현식의 구분 기호 로 사용됩니다 . 우리도 쓸 수 있어요sed/

sed -i 's/^/\/home\/info\//' file

그러나 이것은 읽고 쓰기가 약간 어렵습니다(Wikipedia 참조:기울어진 이쑤시개 증후군).

언제나처럼 달리세요sed 아니요-i올바른 작업이 수행되는지 확인하려면 먼저 이 옵션을 선택하세요 .


sed-i내부 편집을 지원하지 않는 시스템 의 경우 결과를 임시 파일에 쓴 다음 원본 파일을 해당 파일로 바꿔야 합니다.

sed 's#^#/home/info/#' <file >file.new &&
mv file.new file

sed명령이 성공하면 원본 파일이 수정된 파일로 대체됩니다.

소유권 및 파일 권한과 같은 메타데이터를 보존해야 하는 경우 다음을 수행하십시오.

cp file file.tmp &&
sed 's#^#/home/info/#' <file.tmp >file &&
rm file.tmp

답변2

코살로난다의 답변edsed를 사용해도 괜찮습니다 . AIX에 기본적으로 설치되는 sed를 사용하여 내부 편집을 제안하겠습니다 .

ed -s input <<< $'1,$s!^!/home/info/!\nw\nq'

또는 더 간단히 말하면 ,전체 파일 주소 범위에 대한 바로 가기로 사용됩니다.1,$

ed -s input <<< $',s!^!/home/info/!\nw\nq'

그 밖의 아이디어는 sed와 동일합니다. 검색을 사용 s하고 명령을 구분 기호로 바꾸십시오.아니요LTS를 피하기 위해 검색 또는 대체 텍스트에 표시됩니다. #내 부분에서는 무작위 선택 이 아닙니다 !. 나머지 명령은 줄 바꿈으로 구분되며 파일을 다시 쓰고 종료 ed하도록 지시됩니다 . 명령은 모두 여기서 문자열로 명령에 전송됩니다 . 나는 이 플래그를 사용하여 "스크립트 모드"로 들어가 출력을 조용하게 만듭니다(여기서 읽고 쓴 바이트).wqed-sed

여기서 문자열을 사용하려면 다음을 사용해야 합니다.크쉬 93, 재고 AIX 시스템에도 있습니다.

여기에 있는 문자열 외에도 다음을 사용할 수도 있습니다 printf.

printf '1,$s!^!/home/info/!
w
q
' | ed -s input

가독성을 높이기 위해 ed명령을 여러 줄로 나누거나 모두 한 줄에 배치했습니다.

printf '1,$s!^!/home/info/!\nw\nq\n' | ed -s input

printf 외에도 이 문서도 작동합니다.

ed -s input << 'EOF'
1,$s!^!/home/info/!
w
q
EOF

답변3

com awk의 외부 대안

awk -i inplace  '{ print  "/home/info/"  $1 }'  file

/home/info/account_1
  • -i inplace
    -iinplace는 각 입력 파일의 "in-place" 편집을 수행하는 GNU sed를 에뮬레이트하는 옵션을 확장합니다 . 확장 기능을 적절하게 호출하기 위해 번들로 제공되는 inplace.awk 포함 파일을 사용합니다.

  • print "/home/info/" 첫 번째 필드에 참여하세요.

  • $1은 파일의 첫 번째 필드를 나타냅니다.

관련 정보