이것을 파일로 생각하십시오.
M ../.gitlab-ci.yml
M ../force-app/main/ui/classes/test.cls
A ../pmd/get_diff_branches.sh
?? ../assets/server.key
?? ./
다음과 같이 줄에서 모든 추가 문자를 하나씩 제거하겠습니다.
sed /^D/d diff.txt | sed 's/^..//' | sed /^force-app/p | sed /^force-app\\/package\.xml/d | sed 's/.*\ ->\ //' > temp.txt
이 작업을 수행한 후 파일은 다음과 같습니다.
../.gitlab-ci.yml
../assets/server.key
../force-app/main/ui/classes/test.cls
../pmd/get_diff_branches.sh
./
동일한 줄에서 어떻게 ./
삭제합니까? 다른 명령을 작성하면 모든 줄에서 제거가 시작되지만 위 코드 조각의 마지막 줄과 정확히 일치하는 경우에만 삭제 ./
하고 싶습니다 ../
운영 체제:리눅스 10
답변1
첫째, 별도의 sed
명령이 필요하지 않습니다. 여러 명령을 함께 묶을 수 -e
있으며, sed
지원하는 경우 ;
. 또한 명령 중 하나는 한 줄만 복사합니다: sed /^force-app/p
. 이는 줄을 반복하지 않으려는 경우에만 sed -n
의미가 있습니다 (억제 인쇄를 사용하는 경우).
GNU가 있다면 다음과 같이 하면 됩니다 sed
:
$ sed 's/^[^ ]* *//; /\/force-app\/package\.xml/d; /^\.\/$/d' file
../.gitlab-ci.yml
../force-app/main/ui/classes/test.cls
../pmd/get_diff_branches.sh
../assets/server.key
GNU가 없으면 다음을 sed
시도해 보세요.
$ sed -e 's/^[^ ]* *//' -e '/\/force-app\/package\.xml/d' -e '/^\.\/$/d' file
../.gitlab-ci.yml
../force-app/main/ui/classes/test.cls
../pmd/get_diff_branches.sh
../assets/server.key
명령은 다음과 같습니다:
s/^[^ ]* *//
: 줄의 시작 부분에서 공백이 아닌 모든 문자를 제거하고 그 뒤에 0개 이상의 공백이 나옵니다./\/force-app\/package\.xml/d
: 행이 일치하면/force-app/package.xml
삭제합니다. 귀하의 예에 이 패턴과 일치하는 행이 포함되어 있지 않기 때문에 여기서 추측하고 있습니다. 을(를) 사용하고 있지만 그 앞에 항상 1이 있으므로^force-app...
정확할 수 없습니다 ./
/^\.\/$/d
: 다음을 포함하는 모든 줄을 삭제합니다.오직./
다른 것은 없습니다.