다음과 같은 줄이 포함된 파일이 있습니다.
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
코살로난다의 답변ed
sed를 사용해도 괜찮습니다 . AIX에 기본적으로 설치되는 sed를 사용하여 내부 편집을 제안하겠습니다 .
ed -s input <<< $'1,$s!^!/home/info/!\nw\nq'
또는 더 간단히 말하면 ,
전체 파일 주소 범위에 대한 바로 가기로 사용됩니다.1,$
ed -s input <<< $',s!^!/home/info/!\nw\nq'
그 밖의 아이디어는 sed와 동일합니다. 검색을 사용 s
하고 명령을 구분 기호로 바꾸십시오.아니요LTS를 피하기 위해 검색 또는 대체 텍스트에 표시됩니다. #
내 부분에서는 무작위 선택 이 아닙니다 !
. 나머지 명령은 줄 바꿈으로 구분되며 파일을 다시 쓰고 종료 ed
하도록 지시됩니다 . 명령은 모두 여기서 문자열로 명령에 전송됩니다 . 나는 이 플래그를 사용하여 "스크립트 모드"로 들어가 출력을 조용하게 만듭니다(여기서 읽고 쓴 바이트).w
q
ed
-s
ed
여기서 문자열을 사용하려면 다음을 사용해야 합니다.크쉬 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
-i
inplace는 각 입력 파일의 "in-place" 편집을 수행하는 GNU sed를 에뮬레이트하는 옵션을 확장합니다 . 확장 기능을 적절하게 호출하기 위해 번들로 제공되는 inplace.awk 포함 파일을 사용합니다.print "/home/info/"
첫 번째 필드에 참여하세요.$1은 파일의 첫 번째 필드를 나타냅니다.