Portál AbcLinuxu, 13. května 2025 02:11
sed 's/D1 .. 00/\nD1 ?? 00/g'
vyhladať "D1 čokolvek 00" a nahradiť(nový riadok) "D1 práve_to_čokolvek 00"
Prečo nefunguje tento zápis:
jpnevulator -t /dev/ttyS0 -r | tr '\n' ' ' | sed 's/D1 00/\nD1 00/g'
pokiaľ to zapíšem len s jedným presmerovaním(či už tr,alebo sed),tak je to ok.
Řešení dotazu:
Pokud se mi čirou náhodou podařilo uhodnout, co jste měl na mysli, můžete zkusit
sed -re 's/D1 .* 00/\n&/'
Jinak buď můžete doufat, že někdo bude mít víc štěstí, nebo to zkusit znovu a srozumitelněji.
marian@marian-desktop:~$ jpnevulator -t /dev/ttyS0 -r
00 3B 9F 11 40 60 49 52 44 45 54 4F 20 41 43 53
20 56 36 2E 30 D2 42 00 00 01 42 1D 90 19 D2 FE
00 00 19 FE 01 02 00 00 21 00 00 10 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 0D 90 00 D2
40 00 00 11 40 03 0B 16 01 1D 00 00 00 01 00 01
00 00 00 00 00 0E 90 09 D2 FE 00 00 09 FE 01 02
marian@marian-desktop:~$ jpnevulator -t /dev/ttyS0 -r | tr '\n' ' '
D5 00 80 02 50 00 00 00 80 06 01 49 62 55 AA B4 E4 54 14 A8 A3 7B E4 1C EB 77 F3 06 BC 92 02 EF D4 BB 92 BB C9 4A 49 C5 63 F4 C0 E4 C3 A8 6D 9D 20 0A 83 C2 C7 07 FC CA 6F 75 69 35 76 09 F5 D0 84 0C 46 7A 2F 8B C4 8E B4 34 61 52 34 26 91 FB 70 C9 D7 9F 03 14 90 41 D5 FE 80 02 41 FE 01 05 9D 00 38 01 02 38 3A 12 F6 57
ale marian@marian-desktop:~$ jpnevulator -t /dev/ttyS0 -r | tr '\n' ' ' | sed 's/D1 .. 00/\n&/g'
už nefacha
B2 90 00 D1 00 00 00 24 00 98 00 00 00 00 1D CC
A8 ED B7 09 5A 41 7F 29 18 3C 4B A5 BB A3 43 EC
A5 4A A7 30 1C 99 02 24 E7 7C CF E7 F6 90 19 D1
FE 00 00 19 FE 01 01 00 00 3F 00 00 10 49 7F 30
D8 BB 03 36 F5 19 92 05 0C B9 A5 FD 4A 9C 90 00
B2 90 00
D1 00 00 00 24 00 98 00 00 00 00 1D CC A8 ED B7 09 5A 41 7F 29 18 3C 4B A5 BB A3 43 EC
A5 4A A7 30 1C 99 02 24 E7 7C CF E7 F6 90 19
D1 FE 00 00 19 FE 01 01 00 00 3F 00 00 10 49 7F 30 D8 BB 03 36 F5 19 92 05 0C B9 A5 FD 4A 9C 90 00
B2 90 00
D1 00 00 00 24 00 98 00 00 00 00 1D CC A8 ED B7 09 5A 41 7F 29 18 3C 4B A5 BB A3 43 EC A5 4A A7 30 1C 99 02 24 E7 7C CF E7 F6 90 19
D1 FE 00 00 19 FE 01 01 00 00 3F 00 00 10 49 7F 30 D8 BB 03 36 F5 19 92 05 0C B9 A5 FD 4A 9C 90 00
V tom případě mi
tr '\n' ' ' | sed -re 's/D1 .. 00/\n&/g'
dává vámi požadovaný výsledek.
No tej dvojitej pipe niečo vadí.
sed
zpracovává vstupní text po řádcích, takže když mu všechny LF nahradíte mezerami, nikdy mu první řádek neskončí. A z /dev/ttyS0
pochopitelně nikdy nedostane ani EOF.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.