Мне нужно заменить 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 для первой строки, но не знаю, как применить его к последней строке. Есть ли более элегантное решение? У меня есть огромный файл, в котором мне нужно сделать такую замену.
s/\(owl:Class\)\(.*org\/\)\(LP.*\)"/\3\2\3/g
Я использую машину с Centos OS 7.7 Linux.
Вы можете заменить символ \n другим символом (таким, который больше нигде внутри файла), а затем продолжить работу в обычном режиме.
\n
cat foo.txt | tr '\n' '\r' | sed -e 's/\(owl:Class\)\(.*org\/\)\(LP.*\)"/"\3"\2\3/g' | tr '\r' '\n'