간단한 텍스트 대체를 사용하여 다른 사람이 기호 하나의 이름을 바꾼 소스 파일이 있다고 가정 해보십시오. 이 파일의 diff 출력은 일반적으로 매우 길며 일어난 일의 매우 유용한 식별자가 아닙니다. 변경 사항이 단순히 s/a/b/g
이고, 그렇다면 무엇이 a
과 b
인지 알기를 원합니다.이 도구를 미리 알려주지는 않을 것입니다. (여기서 'a'와 'b'는 줄 바꿈을 포함하지 않는다고 가정 할 수 있습니다.)파일에서 검색 작업 바꾸기
- 검색을 지정하고 바꾸는 데 사용할 알고리즘은 무엇입니까? (쉬운)
- 몇 가지 텍스트 대체가 발생하면 어떻게 작동합니까? (상당히 쉽다)
- 원본 파일을 비교하지 않고서 어떻게 diff 출력에서 작동하도록 작성하겠습니까? (다소 힘들어 짐)
- 예. 검색/바꾸기보다는 정규식 검색을 식별합니까? (하드)
- 다른 사람과 함께 이러한 종류의 변경 사항이 포함 된 파일에서 sed 표현식과 많은 단축 된 diff를 생성하는 경험적 방법을 생각해 낼 수 있습니까? (하드)
이것은 알고리즘 설계와 비슷하지만 느슨하게 사용하고자하는 실제 도구를 기반으로하는 사용자를위한 질문이므로 좋은 명령 행 도구에 대해 알고 싶다면 위의 보너스 포인트 중 하나를 수행합니다. ;) 내가 지금 생각
정규식에 대해 이야기 할 때 원래 문자열의 일부가 대체 문자열에 재사용 될 수 있습니까? 이것은 정규 표현식에 의한 단순한 검색보다는 일을 상당히 어렵게 만든다고 생각합니다. 그러나 상수 연산으로 대체하십시오 (아마도 목록에 두 개의 다른 항목을 쓸 수 있습니다). –
그냥 좀 더 생각해 보았습니다. 순서가 중요하기 때문에 여러 텍스트 대체가 쉽지는 않습니다 :'s/program/executable' 다음에 오는's/programmer/developer'는'programmer'에 다르게 영향을줍니다. 작업이 전체 단어 (프로그래밍 언어의 토큰)에만 영향을 미쳤다고 가정 할 수 있습니까? –
나는 단순한 경우조차도 당신의 상태가 한계가있는 한 이것을 해결하게되어 기쁩니다. 나는 일반적인 경우에 정규 표현식을 발견하는 것이 가능하다고 생각하지 않으며, 검색 - 치환 쌍을 겹쳐 쓰면 합리적인 알고리즘이 실제로 사용 된 저자와 다른 검색/대체 집합을 만들 것이라고 의심한다. 그러나 현재로서는 해결책이 없다는 점을 감안할 때, 부분적인 대답조차도 전혀없는 것보다 낫습니다. 그래서 가정에 당신의 가정을 설명하고 거기에서 나가십시오. – ijw