각 줄의 처음 몇 글자를 제거하려고 시도했지만 실패했습니다./

각 줄의 처음 몇 글자를 제거하려고 시도했지만 실패했습니다./

이것을 파일로 생각하십시오.

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: 다음을 포함하는 모든 줄을 삭제합니다.오직 ./다른 것은 없습니다.

관련 정보