awk에서 어떻게 "결합"하거나 후행 /를 자르나요?

awk에서 어떻게 "결합"하거나 후행 /를 자르나요?
 echo -n "refs/heads/feature" | awk -F '/' -v OFS='/' '{ print $3, $4 }' | sed 's/\/$/g'
sed: 1: "s/\/$/g": unterminated substitute in regular expression

sed를 제거하면 인쇄가 됩니다. feature/원하는 feature경우에만 인쇄됩니다.

echo -n "refs/heads/feature/foo" | awk -F '/' -v OFS='/' '{ print $3, $4 }'

나는 원해요feature/foo

git이것은 github 작업 워크플로입니다. env var에서 참조를 가져와 GITHUB_REF다른 워크플로에 할당하려고 합니다.

답변1

$ echo -n "refs/heads/feature" | awk -F '/' '{ print $3 (NF>3 ? FS $4 : "")}'
feature

$ echo -n "refs/heads/feature/foo" | awk -F '/' '{ print $3 (NF>3 ? FS $4 : "")}'
feature/foo

답변2

다음 방법을 사용할 수 있습니다 cut. 슬래시를 구분 기호로 사용하여 세 번째 필드부터 마지막 ​​필드까지 인쇄합니다.

while read branch; do
    echo "$branch" | cut -d/ -f3-
done <<END
refs/heads/feature
refs/heads/feature/foo
END

산출

feature
feature/foo

세 번째와 네 번째 필드만 필요한 경우 -f3-4또는 를 사용할 수도 있습니다.-f3,4

답변3

필드가 3보다 큰지 여부에 따라 OFS 값을 동적으로 설정합니다.

$ awk '
  BEGIN { a[1] = FS = "/" }
  {
    OFS = a[(NF>3)]
    print $3, $4
  }
' file

관련 정보