Přeháníte to, využijte svou strukturu souborů, aby to bylo jednoduché!
Pokud najdeme řetězec [United
v řádku, velká písmena od závěrečné složené závorky až po konec řádku dává výsledek, po kterém toužíte. Překlad do jazyka Sed,
sed '/\[United/s/].*/\U&/' file
Všimněte si, že výše uvedené je specifické pro GNU Sed. Pokud není k dispozici, ale v systému POSIX, můžete použít Ex (nebo se podívejte na verzi Awk od αғsнιη) s podobnou syntaxí:
printf '%s\n' 'g/\[United/s/].*/\U&/' '%p' | ex file
Chcete-li uložit změny do souboru místo tisku výsledků, změňte %p
do x
.
Pomocí awk
:
awk -F"[][]" '$2 ~/^United/ { $2="["$2"]"; $3=toupper($3); }1' OFS='' infile
v rámci [...]
definovali jsme oba ]
a [
jako oddělovač polí a poté kontrolu proti druhému poli, pokud začíná United
text, pokud ano, přidejte zpět []
kolem druhého pole (předpokládám, že neexistuje žádný jiný sloupec, který by tyto znaky naklonil, jinak toto pole bude chybět); pak převedeme třetí sloupec na jeho hodnotu na velká písmena; idiom 1
je spouštěč awk
výchozí tisk (druh vždy pravdivé podmínky).