시작 및 종료 태그로 구분 된 일부 섹션이있는 입력 파일이 있습니다. 예를 들면 다음과 같습니다.
line A
line B
@@inline-code-start
line X
line Y
line Z
@@inline-code-end
line C
line D
X, Y, Z 줄이 일부 명령 ( nl
예 :)을 통해 필터링되도록이 파일에 변환을 적용하고 싶지만 나머지 줄은 변경되지 않고 통과합니다. 공지 있음 nl
은 라인 X, Y, Z의 각각에인가되는 정적 변형되지 않도록 (라인 수)을 가로 질러 라인 상태를 축적한다. ( 편집 : 그것은 지적 된 nl
상태 축적이 필요없는 모드에서 캔 작업을하지만 난 그냥 사용하고 nl
문제를 단순화하기 위해 예를 들어 실제로는 명령이 더 복잡한 사용자 정의 스크립트입니다.. 정말 찾고 무엇 위한 입력 파일의 항에 표준 필터를 적용하는 문제에 대한 일반적인 해결책 )
출력은 다음과 같아야합니다.
line A
line B
1 line X
2 line Y
3 line Z
line C
line D
파일에 변환이 필요한 여러 섹션이있을 수 있습니다.
업데이트 2 원래 섹션이 하나 이상인 경우 어떻게해야하는지 지정하지 않았습니다. 예를 들면 다음과 같습니다.
line A
line B
@@inline-code-start
line X
line Y
line Z
@@inline-code-end
line C
line D
@@inline-code-start
line L
line M
line N
@@inline-code-end
내 기대는 상태가 주어진 섹션 내에서만 유지되고 다음을 제공한다는 것입니다.
line A
line B
1 line X
2 line Y
3 line Z
line C
line D
1 line L
2 line M
3 line N
그러나 문제를 여러 섹션에 걸쳐 유지해야한다고 해석하는 것이 유효하며 많은 상황에서 유용합니다.
최종 업데이트 2
첫 번째 생각은 우리가 어떤 섹션에 있는지 추적하는 간단한 상태 머신을 만드는 것입니다.
#!/usr/bin/bash
while read line
do
if [[ $line == @@inline-code-start* ]]
then
active=true
elif [[ $line == @@inline-code-end* ]]
then
active=false
elif [[ $active = true ]]
then
# pipe
echo $line | nl
else
# output
echo $line
fi
done
내가 뭘 실행 :
cat test-inline-codify | ./inline-codify
각 호출 nl
이 독립적이므로 행 번호가 증가 하지 않으므로 작동 하지 않습니다.
line A
line B
1 line X
1 line Y
1 line Z
line C
line D
다음 시도는 fifo를 사용하는 것입니다.
#!/usr/bin/bash
mkfifo myfifo
nl < myfifo &
while read line
do
if [[ $line == @@inline-code-start* ]]
then
active=true
elif [[ $line == @@inline-code-end* ]]
then
active=false
elif [[ $active = true ]]
then
# pipe
echo $line > myfifo
else
# output
echo $line
fi
done
rm myfifo
올바른 출력을 제공하지만 순서가 잘못되었습니다.
line A
line B
line C
line D
1 line 1
2 line 2
3 line 3
캐싱이 진행 중일 수 있습니다.
이 모든 것에 대해 잘못 가고 있습니까? 이것은 꽤 일반적인 문제처럼 보입니다. 나는 이것을 해결할 간단한 파이프 라인이 있어야한다고 생각합니다.
nl
예제 필터 로만 사용 하고 있다는 질문에 명확히했다 . 필터가 정확히 무엇을하고 있는지에 대한 세부 사항을 glossing하여 문제를 단순화 할 것이라고 생각했지만 아마도 더 혼란 스러울 것입니다. 사실, 나는 집에서 만든 정적 블로그 생성기를 위해 코드 하이 라이터를 통해 하위 섹션을 필터링하고 있습니다. 지금은 gnu 사용 source-highlight
하고 있지만 변경 될 수 있으며 포맷터와 같은 더 많은 필터를 추가 할 수 있습니다.
nl
state 를 축적 할 필요가 없습니다 . 봐에서nl -d
귀하의 확인man
/info
에 대한 정보는 페이지nl
의 섹션 구분 기호를 .