이러한 문자열을 다시 작성하고 "#"으로 시작하는 문자열 부분을 문자열 자체 위에 배치할 수 있습니까?

이러한 문자열을 다시 작성하고 "#"으로 시작하는 문자열 부분을 문자열 자체 위에 배치할 수 있습니까?

간단하고 빠른 질문입니다.

나는 이것을 가지고있다

awk -f file            # awk use file as input
awk '/word/' file      # awk show me word
awk '/32$/' text       # all words with 32..

나는 이것을 원한다

# awk use file as input
awk -f file       


# awk show me word                                              
awk '/word/' file      


# all words with 32..                                         
awk '/32$/' text  

awk를 사용하여 이 작업을 수행할 수 있나요? 다른 명령도 환영합니다(perl, sed, python..)

답변1

$ awk -F '[[:space:]]+#' '{print "#" $2 ORS $1 ORS}' file
# awk use file as input
awk -f file

# awk show me word
awk '/word/' file

# all words with 32..
awk '/32$/' text

#그러나 이는 제공한 입력/출력 예제에서와 같이 각 입력 줄에서 1 앞에 공백이 있는 경우에만 작동합니다. 실제 데이터가 그렇지 않은 경우 질문을 편집하여 #awk 코드 및/또는 주석에서 공백이 앞에 오는 것을 포함하여 보다 실제적인 입력/출력 예제를 제공하십시오.

awk '/foo # bar/' file          # lines with # before bar

#그리고 그러한 경우(특히 댓글의 s)를 처리하는 알고리즘을 알려주십시오.

답변2

그리고 perl:

perl -i -lpe 's/(.*\S)\s+(#.*)/\2\n\1\n\n/' your-file

#이렇게 하면 하나 이상의 공백 문자가 가장 오른쪽에 나타나는 바로 뒤에 공백이 아닌 문자 부분이 이동됩니다.

을 사용하면 -i파일이 in번 편집됩니다.

관련 정보