這是我的來源:
TABLE;APGFPOLI;
這是我想要的輸出:
01 APGFPOLI.
所以我想要做的是洗掉“TABLE”并在“ APGFPOLI ”之前添加01 。我只需要為第一行做。所以我試著做:
#!/bin/bash
#Fichier Source
fichier="APGFPOLI.des.txt"
champAdd="05 "
if [[ -f "$fichier" ]]
then
# read it
sed -i '1 s/TABLE//' $fichier |sed -i 's/CHAR/PIC X/' $fichier | sed -E '/Numérique/s/;Numérique\s ([^;]*)/;PIC 9(\1)/' $fichier | while IFS=';' read -r nomChamp format libelle
do
echo \* $libelle
echo $champAdd $nomChamp $format.
done > test.txt
fi
如您所見,我的第一個 sed 應該洗掉 TABLE 但它不起作用。我也為我的其他線路做一個回應,但我也想回應這個特定的第一行。
這是我的 bash 給我的輸出:
*
05 TABLE APGFPOLI.
如果有幫助,這是我的完整來源:
TABLE;APGFPOLI;
Contrat;CHAR(16);Numéro du contrat
Libelle;CHAR(30);Libellé du contrat
DtCreation;CHAR(8);Date de création
DtMaj;CHAR(8);Date de dernière MAJ
DtEffet;CHAR(8);Date d'effet adhésion
MotifAdh;CHAR(2);Motif d'adhésion
DtRadiation;CHAR(8);Date de radiation
DtEnrRad;CHAR(8);Date enregistrement radiat
MotifRad;CHAR(2);Motif de radiation
MtPrime;Numérique 8.2;Montant prime d'origine
DtEffetSusp;CHAR(8);Date d'effet de suspension
DtFinSusp;CHAR(8);Date de fin de suspension
MotifSusp;CHAR(2);Motif de suspension
DestBord;CHAR(1);Destinataire du bordereau
CdDest;CHAR(5);Code du destinataire
NivRupBord;CHAR(1);Niveau rupture bordereau
BordCETIP;CHAR(1);Bordereau CTIP
EnvBordNom;CHAR(1);Envoi bordereau nominatif
Indice;CHAR(2);Indice appliqué
Echeance;CHAR(2);Echéance de l'indice (MM)
Effectif;CHAR(5);Effectif
CdRegr;CHAR(3);Code regroupement 1
CdGroupe;CHAR(3);Code regroupement 2
Periodicite;CHAR(1);Périodicité
Terme;CHAR(1);Terme
Produit;CHAR(6);Code produit affecté
Inspecteur;CHAR(5);Inspecteur
CleInsp;CHAR(1);Clé inspecteur
Filler;CHAR(6);Filler
uj5u.com熱心網友回復:
您通常不希望sed -i在同一個檔案上運行多次。
您的整個任務可以重新表述為
sed -i '1s/TABLE/01 /' APGFPOLI.des.txt
如果替換字串應該來自 shell 變數,則需要使用雙引號而不是單引號:
replacement="05"
sed -i "1s/TABLE/$replacement /" APGFPOLI.des.txt
如果您想保留其他任務(問題中未記錄),您可以輕松地將它們合并到同一個腳本中。記住,sed 是一種腳本語言;你可以輸入任意復雜的腳本(一些瘋狂的人甚至在sed腳本中實作了桌面計算器和游戲人生)。
sed -i -E -e '1 s/TABLE/01 /' -e 's/CHAR/PIC X/' \
-e '/Numérique/s/;Numérique\s ([^;]*)/;PIC 9(\1)/' APGFPOLI.des.txt
如果在此之后你想拉出結果并用一些裝飾來顯示它,我會添加第二個sed腳本,-i以便它在標準輸出上顯示輸出而不修改檔案。
sed '1s/\([^;]*\);\([^;]*\);\([^;]*\);.*/* \3\n05 \2 \1/;q' APGFPOLI.des.txt
uj5u.com熱心網友回復:
TABLE;要從第一行中洗掉并添加 prepend 01 ,您只需執行以下操作:
fichier="APGFPOLI.des.txt"
sed -i '1s/^TABLE;/01 /' "$fichier"
當您在 SO 中詢問某些內容時,建議洗掉與您的問題無關的代碼部分,例如命令sed -i 's/CHAR/PIC X/' $fichier等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383854.html
