반응형
쉘 펼쳐보기를 사용하여 지정된 패턴 목록 여러 줄을 파일에 삽입
쉘 확장을 사용하여 파일에 여러 줄을 삽입하고 싶습니다. 내 입력 파일 내용은 다음과 가변합니다. input.txt :
abcd
accd
cdef
line
web
이제 input.txt 파일 에서 'cdef'줄을 네 줄을 삽입해야 합니다. 내 파일을 삽입하면 다음과 같이 변경됩니다.
abcd
accd
cdef
line1
line2
line3
line4
line
web
위의 삽입은 쉘 펼쳐보기를 사용하여 수행해야합니다. 아무도 나를 도울 수 있습니까?
또 다른 sed
,
sed '/cdef/r add.txt' input.txt
input.txt :
abcd
accd
cdef
line
web
add.txt :
line1
line2
line3
line4
테스트 :
sat:~# sed '/cdef/r add.txt' input.txt
abcd
accd
cdef
line1
line2
line3
line4
line
web
input.txt
파일 의 변경 사항을 적용하려는 경우 . 그런 다음, 사용 -i
과 함께 sed
.
sed -i '/cdef/r add.txt' input.txt
당신이 표현으로 정규식을 사용하려는 경우에는 사용할 필요가 -E
에 태그를 sed
.
sed -E '/RegexPattern/r add.txt' input.txt
GNU 사용 sed
:
sed "/cdef/aline1\nline2\nline3\nline4" input.txt
다음으로 경우 :
abcd
accd
cdef
line
web
다음을 생성합니다.
abcd
accd
cdef
line1
line2
line3
line4
line
web
파일의 변경 사항을 제자리에 저장하고 다음과 같이 말하십시오.
sed -i "/cdef/aline1\nline2\nline3\nline4" input.txt
sed '/^cdef$/r'<(
echo "line1"
echo "line2"
echo "line3"
echo "line4"
) -i -- input.txt
사용 awk
:
awk '/cdef/{print $0 RS "line1" RS "line2" RS "line3" RS "line4";next}1' input.txt
설명 :
- 삽입하려는 줄을 사용하여 찾습니다.
/.../
- 다음을 사용하여 현재 줄을 인쇄합니다.
print $0
RS
내장되어awk
기본적 세트입니다new-line
.- 이 변수로 구분 된 새 줄을 추가합니다.
1
끝에는 다른 모든 줄이 인쇄됩니다. 사용next
은 우리가 이미 사용하여 인쇄 한 이후 현재 행을 방지 할 수 있습니다print $0
.
$ awk '/cdef/{print $0 RS "line1" RS "line2" RS "line3" RS "line4";next}1' input.txt
abcd
accd
cdef
line1
line2
line3
line4
line
web
다음을 수행하십시오.
awk '...' input.txt > tmp && mv tmp input.txt
이 대답은 이해하기.
- 패턴 이전에 복사
- 라인 추가
- 패턴 후 복사
원본 파일
FILENAME = '앱 / 공급자 / AuthServiceProvider.php'
STEP 1 패턴까지 복사
sed '/THEPATTERNYOUARELOOKINGFOR/Q' $FILENAME >>${FILENAME}_temp
2 단계 라인 추가
cat << 'EOL' >> ${FILENAME}_temp
HERE YOU COPY AND
PASTE MULTIPLE
LINES, ALSO YOU CAN
//WRITE COMMENTS
AND NEW LINES
AND SPECIAL CHARS LIKE $THISONE
EOL
3 단계 나머지 파일 추가
grep -A 9999 'THEPATTERNYOUARELOOKINGFOR' $FILENAME >>${FILENAME}_temp
원본 파일 교체
mv ${FILENAME}_temp $FILENAME
변수가 필요한 경우 2 단계에서 'EOL'을 EOL로 바꿉니다.
cat << EOL >> ${FILENAME}_temp
this variable will expand: $variable1
EOL
최소한의 도구로 몇 개의 파일을 템플릿으로 작성해야했으며 위의 문제 sed -e '/../r file.txt
는 나머지 일치 항목을 인쇄 한 후에 만 파일을 추가하고 대체하지 않는다는 것입니다.
그렇지 않습니다 (모든 일치 항목이 대체되고 동일한 지점에서 패턴 일치가 계속됨).
#!/bin/bash
TEMPDIR=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")
# remove on exit
trap "rm -rf $TEMPDIR" EXIT
DCTEMPLATE=$TEMPDIR/dctemplate.txt
DCTEMPFILE=$TEMPDIR/dctempfile.txt
# template that will replace
printf "0replacement
1${SHELL} data
2anotherlinenoEOL" > $DCTEMPLATE
# test data
echo -e "xxy \n987 \nxx xx\n yz yxxyy" > $DCTEMPFILE
# print original for debug
echo "---8<--- $DCTEMPFILE"
cat $DCTEMPFILE
echo "---8<--- $DCTEMPLATE"
cat $DCTEMPLATE
echo "---8<---"
# replace 'xx' -> contents of $DCTEMPFILE
perl -e "our \$fname = '${DCTEMPLATE}';" -pe 's/xx/`cat $fname`/eg' ${DCTEMPFILE}
awk
중간에 일부 명령의 출력을 삽입하는 데 사용할 수 있습니다 input.txt
.
삽입 할 줄은에서 생성 한 번호 가있는 cat otherfile
, ls -l
또는 4 줄 의 출력 일 수 있습니다 printf
.
awk 'NR==FNR {a[NR]=$0;next}
{print}
/cdef/ {for (i=1; i <= length(a); i++) { print a[i] }}'
<(printf "%s\n" line{1..4}) input.txt
반응형
'ProgramingTip' 카테고리의 다른 글
UIBarButton (0) | 2020.12.03 |
---|---|
내부 조인에 대한 Entity Framework 쿼리 (0) | 2020.12.03 |
Angular 2에서 쿼리 변수를 처리하는 방법 (0) | 2020.12.03 |
C #의 다중 시작 화면? (0) | 2020.12.03 |
어떤 경우에 튜플을 사전 키로 사용합니까? (0) | 2020.12.03 |