내 파일에는 다음과 같은 줄 목록이 있습니다.
6642a51e0ed5e6f89e5e4090b9aa0fb3 /home/device/eth0/uid
d66d1417251a9a151176c34acf046878 /home/device/eth0/uid64
db5c3c9d348ce26169c56901a7606961 /home/device/eth1/dhcp
226c1a53543bddcca5d136fdd5700f4c /home/device/eth1/ipv4
13b376c06f904b607c2a23bd76115595 /home/device/eth1/netmask
빈 줄 없이 이 파일에서 특정 줄을 제거하고 싶습니다.
나는 sed
이것이 적절한 명령이라는 것을 알았습니다. 여러 가지 접근 방식을 시도하고 다른 사람들의 작업을 살펴보았지만 여전히 어떻게 해야 할지 모르겠습니다.
이게 내가 가진 거야sed -i "s|'/home/device/pn'|d" TestRun.chk
하지만 작동하지 않습니다... 슬래시를 끊는 방법과 사용하지 않는 방법에 대한 기사를 읽은 적이 있습니다. 이것이 내 상황에 적합한지 모르겠습니다.
도와주셔서 감사합니다!
편집하다:
입력 예:
6642a51e0ed5e6f89e5e4090b9aa0fb3 /home/device/eth0/uid
d66d1417251a9a151176c34acf046878 /home/device/eth0/uid64
db5c3c9d348ce26169c56901a7606961 /home/device/eth1/dhcp
226c1a53543bddcca5d136fdd5700f4c /home/device/eth1/ipv4
13b376c06f904b607c2a23bd76115595 /home/device/eth1/netmask
예상되는 출력을 sed
제거하는 명령을 실행 한 후:/home/device/eth1/ipv4
6642a51e0ed5e6f89e5e4090b9aa0fb3 /home/device/eth0/uid
d66d1417251a9a151176c34acf046878 /home/device/eth0/uid64
db5c3c9d348ce26169c56901a7606961 /home/device/eth1/dhcp
13b376c06f904b607c2a23bd76115595 /home/device/eth1/netmask
답변1
를 사용하면 sed
다음을 수행할 수 있습니다.
$ sed -i '\| pattern to match |d' File
pattern to match
그러면 파일에 포함된 줄이 삭제됩니다 .
grep을 사용하면 다음을 수행할 수 있습니다.
$ echo "$(grep -v "pattern to match" File)" > File
이 -v
옵션을 사용하면 포함되지 않은 행에 대해 grep을 허용한 pattern to match
다음 다시 File로 리디렉션할 수 있습니다.
답변2
보시다시피 파일에 특수 문자가 포함되어 있습니다. 이 명령을 사용하여 모든 줄을 삭제할 수 있습니다. 각 줄의 문자열 특성을 지정해야 합니다. 예를 들어 두 번째 줄은 "uid64"입니다.
sed -i '\|uid64|d' testRun.chk
In my pc it's print this without blank line :
6642a51e0ed5e6f89e5e4090b9aa0fb3 /home/device/eth0/uid
db5c3c9d348ce26169c56901a7606961 /home/device/eth1/dhcp
226c1a53543bddcca5d136fdd5700f4c /home/device/eth1/ipv4
13b376c06f904b607c2a23bd76115595 /home/device/eth1/netmask
보시다시피 두 번째 줄은 없습니다. sed -i '\|ipv4|d' testRun.chk
다음 줄 " " 등에 대해 이 작업을 수행 할 수 있습니다.
행운을 빌어요!