подстановка sed в нескольких строках - PullRequest
0 голосов
/ 14 июля 2020

Мне нужно заменить owl: Class в следующем тексте номером LP

Input

<owl:Class rdf:about="https://loinc.org/LP173100-1">
        <rdfs:subClassOf rdf:resource="https://loinc.org/LP410935-3"/>
        <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Counseling (LP)</rdfs:label>
        <skos:prefLabel rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Counseling</skos:prefLabel>
        <loinc:hasCode rdf:datatype="http://www.w3.org/2001/XMLSchema#string">LP173100-1</loinc:hasCode>
    </owl:Class>

, чтобы замененный вывод выглядел следующим образом:

Output

<LP173100-1 rdf:about="https://loinc.org/LP173100-1">
        <rdfs:subClassOf rdf:resource="https://loinc.org/LP410935-3"/>
        <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Counseling (LP)</rdfs:label>
        <skos:prefLabel rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Counseling</skos:prefLabel>
        <loinc:hasCode rdf:datatype="http://www.w3.org/2001/XMLSchema#string">LP173100-1</loinc:hasCode>
    </LP173100-1>

Я использовал s/\(owl:Class\)\(.*org\/\)\(LP.*\)"/\3\2\3/g для первой строки, но не знаю, как применить его к последней строке. Есть ли более элегантное решение? У меня есть огромный файл, в котором мне нужно сделать такую ​​замену.

Я использую машину с Centos OS 7.7 Linux.

1 Ответ

0 голосов
/ 14 июля 2020

Вы можете заменить символ \n другим символом (таким, который больше нигде внутри файла), а затем продолжить работу в обычном режиме.

cat foo.txt | tr '\n' '\r' | sed -e 's/\(owl:Class\)\(.*org\/\)\(LP.*\)"/"\3"\2\3/g'  | tr '\r' '\n'
...