Bash: 같은 줄에서 읽은 파일 다시 쓰기

Bash: 같은 줄에서 읽은 파일 다시 쓰기

명령줄에서 라우터 연결을 부분적으로 자동화하기 위해 bash 스크립트를 작성 중입니다. 제가 고민하고 있는 부분은 다음과 같습니다.

#!/bin/bash
STRING2="ESSID"
MYPWD=$(pwd)
sudo iwlist wlan1 scan | grep $STRING2 | grep -n $STRING2 > $STRING2.txt
sed -r -e 's/\s+//g' -e 's/:ESSID//' $MYPWD"/"$STRING2".txt

마지막 줄은 텍스트 파일을 열고 텍스트 파일에서 공백과 :ESSID를 제거합니다 $MYPWD/$STRING2.txt. 내가 원하는 것은 sed출력을 해당 파일로 파이프하는 것입니다. 이전 접근 방식은 grep : > $MYPWD"/"$STRING2".txt"다음과 같이 마지막에 파이프를 사용하는 것이었습니다.

sed -r -e 's/\s+//g' -e 's/:ESSID//' $MYPWD"/"$STRING2".txt | grep : > $MYPWD"/"$STRING2".txt"

그러나 그것은 비어 있었습니다 $MYPWD/$STRING2.txt. 왜 이런 일이 발생하는지 모르겠습니다. 어떤 아이디어가 있나요?

편집하다

마지막으로 파이프된 grep이 없으면 실행 후 텍스트 파일에 다음과 같은 텍스트가 포함됩니다.

1:___________ESSID:"somessid"

2:___________ESSID: "somessid"

3:___________ESSID: "somessid"

4:___________ESSID: "somessid"

ps: <__>는 공백을 나타냅니다.

#!/bin/bash
#declaring a string variable
STRING="MERHABA DUNYA"
STRING2="ESSID"
COUNTER="1"
MYPWD=$(pwd)
echo -e "Later you can check the recent networks around you from : " $MYPWD"/"$STRING2".txt\n"
#or MYPWD=${pwd}
#-e flag enables \n escape
echo -e $STRING2".txt is being updated\n. . .\n"
sudo iwlist wlan1 scan | grep $STRING2 | grep -n $STRING2 > $STRING2.txt # | sed -i# #s/ //g $STRING2.txt > $STRING2.txt
sed -r -e 's/\s+//g' -e 's/:ESSID//' $MYPWD"/"$STRING2".txt"
NUMLINE=$(sudo cat $MYPWD/$STRING2.txt | wc -l)
echo -e "\n. . ."
echo -e "\nThere are "$NUMLINE " visible networks\n"

답변1

이런 명령어가 있을 때

sed -e ... "datafile" >"datafile"

길이가 0인 결과가 발생합니다. 그 이유는 쉘이 설정되어 있기 때문입니다.표준 입력그리고표준 출력명령을 실행하기 전에. 그래서표준 출력파일로 전송되어 datafile실행되기 전에 프로세스에서 파일을 생성하거나 자릅니다 sed -e ... "datafile".

일반적인 해결책은 다음과 같습니다.

sed -e ... "datafile" >"datafile.tmp" && mv -f "datafile.tmp" "datafile"

일부 명령(포함된 버전 sed)에는제자리에서 편집옵션:

sed -i.bak -e ... "datafile"
sed --in-place=.bak -e ... "datafile"

관련 정보