Pandoc 형식의 citekeys가 포함된 텍스트가 포함된 Markdown 파일이 포함된 폴더가 있습니다 [@Name:2021]
. 내 citekey에서 콜론을 제거하기로 결정하고 마크다운 파일에서 자동으로 제거하고 싶습니다. citekey는 다음 형식을 취할 수 있습니다.
[@Name:2021]
[@Name:2021, 10]
[@Name:Title]
[Vgl. @Name:2021]
[Vgl. @Name:2021, 20--30]
그래서 그들은 다음과 같아야 합니다:
[@Name2021]
[@Name2021, 10]
[@NameTitle]
[Vgl. @Name2021]
[Vgl. @Name2021, 20--30]
최근에 추가한 일부 citekey에는 더 이상 콜론이 포함되어 있지 않습니다. 물론 형식에 ^[Text]
콜론이 포함되어 있어서 삭제하면 안되는 각주도 있을 수 있습니다.
모든 마크다운 파일의 인용 키에서 콜론을 자동으로 제거할 수 있는 명령줄 유틸리티 명령/스크립트가 있습니까? 당신의 도움을 주셔서 감사합니다!
답변1
Perl은 여기서 유용합니다. 대체 부분은 s///
코드로 계산할 수 있습니다.
perl -pe 's/\[[^]]*@.+?\]/ ($cite = $&) =~ s{:}{}g; $cite /ge' file
산출
[@Name2021]
[@Name2021, 10]
[@NameTitle]
[Vgl. @Name2021]
[Vgl. @Name2021, 20--30]
출력에 만족하면 다음 명령을 사용하여 변경 사항을 파일에 다시 저장할 수 있습니다.
perl -i -pe ...
답변2
GNU를 사용하고 현재 디렉토리에 숨겨져 있지 않은 모든 파일에 in-place( ) 유형의 전역 대체를 적용합니다 sed
.'s/regexp/replacement/g'
-i
sed -i -- 's/\(\[[^]@]*@[^]:]*\):\([^]]*\]\)/\1\2/g' *
s/
교체 시작\(
첫 번째 캡처 그룹 열기\[
리터럴과 일치[
[^]@]*
문자가 아닌 문자]
및 문자가 아닌@
문자 와 일치합니다.@
리터럴과 일치@
[^]:]*
문자가 아닌 문자]
및 문자가 아닌:
문자 와 일치합니다.
\)
첫 번째 캡처 그룹 닫기:
리터럴과 일치:
\(
두 번째 캡처 그룹 열기[^]]*
]
문자가 아닌 문자와 일치\]
리터럴과 일치]
\)
두 번째 캡처 그룹을 닫습니다./
구분 기호 교체\1\2
캡처링 그룹을 포함하는 대체 문자열/g
최종 교체,g
전역 교체
이 명령을 실행하기 전에 대상 디렉터리의 백업을 생성하거나 접미사가 붙은 원본 파일의 복사본을 유지 -i
하도록 변경하세요 . 선택한 diff 도구를 사용하여 원본 파일을 결과와 비교하십시오.-i'.bak'
.bak
답변3
변경하고 싶지 않은 줄이 로 시작하는 줄이라면 ^
다음 명령이 효과가 있을 것 같습니다.
sed '/^\^/!s/://' file
답변4
사용 perl
:
$ perl -lpe 'my($p1, $p2);
substr($_, $p1, $p2-$p1) =~ s/(@[^:]+):/$1/
while
$p1 = 1+index($_, "[", $p2)
and
$p2 = 1+index($_, "]", $p1);
' file
[
$p1/$p2는]
그 뒤의 a 위치입니다.- 그런 다음 substr()에 블록 시작 + 블록 길이가 전달되고 s/// 명령이 해당 블록에서 작동하며 현재 레코드 $_도 업데이트됩니다.
산출:
@Name2021]
[@Name2021, 10]
[@NameTitle]
[Vgl. @Name2021]
[Vgl. @Name2021, 20--30]