லினக்ஸில் sed கட்டளையை எவ்வாறு பயன்படுத்துவது
இது பைத்தியமாகத் தோன்றலாம், ஆனால் லினக்ஸ் sed
கட்டளை என்பது இடைமுகம் இல்லாத உரை திருத்தி. கோப்புகள் மற்றும் ஸ்ட்ரீம்களில் உரையை கையாள கட்டளை வரியிலிருந்து இதைப் பயன்படுத்தலாம். அதன் சக்தியை எவ்வாறு பயன்படுத்துவது என்பதை நாங்கள் உங்களுக்குக் காண்பிப்போம்.
செட் சக்தி
தி sed
கட்டளை என்பது சதுரங்கம் போன்றது: அடிப்படைகளை அறிய ஒரு மணிநேரம் மற்றும் அவற்றை மாஸ்டர் செய்ய வாழ்நாள் முழுவதும் ஆகும் (அல்லது, குறைந்தது நிறைய பயிற்சிகள்). ஒவ்வொரு முக்கிய வகைகளிலும் திறக்கும் காம்பிட்களின் தேர்வை நாங்கள் உங்களுக்குக் காண்பிப்போம் sed
செயல்பாடு.
sed
குழாய் உள்ளீடு அல்லது உரையின் கோப்புகளில் செயல்படும் ஸ்ட்ரீம் எடிட்டர் ஆகும். இருப்பினும், இது ஒரு ஊடாடும் உரை திருத்தி இடைமுகத்தைக் கொண்டிருக்கவில்லை. மாறாக, உரையின் மூலம் செயல்படும்போது அதைப் பின்பற்றுவதற்கான வழிமுறைகளை நீங்கள் வழங்குகிறீர்கள். இவை அனைத்தும் பாஷ் மற்றும் பிற கட்டளை வரி ஓடுகளில் வேலை செய்கின்றன.
உடன் sed
பின்வரும் அனைத்தையும் நீங்கள் செய்யலாம்:
- உரையைத் தேர்ந்தெடுக்கவும்
- உரையை மாற்றவும்
- உரையில் வரிகளைச் சேர்க்கவும்
- உரையிலிருந்து வரிகளை நீக்கு
- அசல் கோப்பை மாற்றவும் (அல்லது பாதுகாக்கவும்)
கருத்துகளை அறிமுகப்படுத்துவதற்கும் நிரூபிப்பதற்கும் எங்கள் எடுத்துக்காட்டுகளை நாங்கள் கட்டமைத்துள்ளோம், மிகக் கடினமானவை (குறைந்தது அணுகக்கூடியவை) sed
கட்டளைகள். இருப்பினும், மாதிரி பொருத்தம் மற்றும் உரை தேர்வு செயல்பாடுகள் sed
வழக்கமான வெளிப்பாடுகளை (ரீஜெக்ஸ்) பெரிதும் நம்பியிருங்கள். சிறந்தவற்றைப் பெறுவதற்கு இவற்றுடன் உங்களுக்கு கொஞ்சம் பரிச்சயம் தேவைப்படும் sed
.
தொடர்புடையது:லினக்ஸில் வழக்கமான வெளிப்பாடுகளை (ரீஜெக்ஸ்) பயன்படுத்துவது எப்படி
ஒரு எளிய உதாரணம்
முதலில், நாங்கள் பயன்படுத்தப் போகிறோம் எதிரொலி
சில உரையை அனுப்ப sed
ஒரு குழாய் வழியாக, மற்றும் வேண்டும் sed
உரையின் ஒரு பகுதியை மாற்றவும். அவ்வாறு செய்ய, பின்வருவனவற்றை தட்டச்சு செய்கிறோம்:
echo howtogonk | sed 's / gonk / geek /'
தி எதிரொலி
கட்டளை “howtogonk” ஐ அனுப்புகிறது sed
, மற்றும் எங்கள் எளிய மாற்று விதி (“கள்” என்பது மாற்றீட்டைக் குறிக்கிறது) பயன்படுத்தப்படுகிறது.sed
முதல் சரத்தின் நிகழ்வுக்கான உள்ளீட்டு உரையைத் தேடுகிறது, மேலும் எந்தவொரு பொருத்தத்தையும் இரண்டாவதாக மாற்றும்.
“கோங்க்” என்ற சரம் “கீக்” ஆல் மாற்றப்படுகிறது, மேலும் புதிய சரம் முனைய சாளரத்தில் அச்சிடப்படுகிறது.
மாற்றீடுகள் அநேகமாக மிகவும் பொதுவான பயன்பாடாகும் sed
. மாற்றீடுகளில் ஆழமாக டைவ் செய்வதற்கு முன்பு, உரையை எவ்வாறு தேர்ந்தெடுப்பது மற்றும் பொருத்துவது என்பதை நாம் அறிந்து கொள்ள வேண்டும்.
உரையைத் தேர்ந்தெடுப்பது
எங்கள் எடுத்துக்காட்டுகளுக்கு ஒரு உரை கோப்பு தேவை. சாமுவேல் டெய்லர் கோலிரிட்ஜின் காவியமான “பண்டைய மரைனரின் ரைம்” இன் வசனங்களைத் தேர்ந்தெடுக்கும் ஒன்றைப் பயன்படுத்துவோம்.
அதைப் பார்க்க பின்வரும்வற்றைத் தட்டச்சு செய்கிறோம் குறைவாக
:
குறைவான coleridge.txt
கோப்பிலிருந்து சில வரிகளைத் தேர்ந்தெடுக்க, நாம் தேர்ந்தெடுக்க விரும்பும் வரம்பின் தொடக்க மற்றும் இறுதி வரிகளை வழங்குகிறோம். ஒற்றை எண் அந்த ஒரு வரியைத் தேர்ந்தெடுக்கிறது.
ஒன்று முதல் நான்கு வரிகளை பிரித்தெடுக்க, இந்த கட்டளையை தட்டச்சு செய்கிறோம்:
sed -n '1,4p' coleridge.txt
இடையில் கமாவை கவனியுங்கள் 1
மற்றும் 4
. தி ப
"பொருந்திய வரிகளை அச்சிடு" என்பதாகும். இயல்பாக,sed
அனைத்து வரிகளையும் அச்சிடுகிறது. பொருந்தக்கூடிய வரிகளுடன் கோப்பில் உள்ள எல்லா உரையையும் இரண்டு முறை அச்சிடுவோம். இதைத் தடுக்க, நாங்கள் அதைப் பயன்படுத்துவோம் -n
(அமைதியான) ஒப்பிடமுடியாத உரையை அடக்குவதற்கான விருப்பம்.
வரி எண்களை மாற்றுவோம், எனவே கீழே காட்டப்பட்டுள்ளபடி வேறு வசனத்தைத் தேர்ந்தெடுக்கலாம்:
sed -n '6,9p' coleridge.txt
நாம் பயன்படுத்தலாம் -e
(வெளிப்பாடு) பல தேர்வுகளை செய்ய விருப்பம். இரண்டு வெளிப்பாடுகளுடன், இரண்டு வசனங்களைத் தேர்ந்தெடுக்கலாம்:
sed -n -e '1,4p' -e '31, 34p 'coleridge.txt
இரண்டாவது வெளிப்பாட்டில் முதல் எண்ணைக் குறைத்தால், இரண்டு வசனங்களுக்கிடையில் ஒரு வெற்றுச் செருகலாம். பின்வருவனவற்றை நாங்கள் தட்டச்சு செய்கிறோம்:
sed -n -e '1,4p' -e '30, 34p 'coleridge.txt
நாம் ஒரு தொடக்க வரியைத் தேர்ந்தெடுத்து சொல்லலாம் sed
கோப்பு வழியாக நுழைந்து மாற்று வரிகளை, ஒவ்வொரு ஐந்தாவது வரியையும் அச்சிட அல்லது எந்தவொரு வரிகளையும் தவிர்க்கவும். கட்டளை ஒரு வரம்பைத் தேர்ந்தெடுக்க நாம் மேலே பயன்படுத்தியதைப் போன்றது. இருப்பினும், இந்த நேரத்தில், நாங்கள் ஒரு சாயலைப் பயன்படுத்துவோம் (~
) எண்களைப் பிரிக்க கமாவுக்கு பதிலாக.
முதல் எண் தொடக்க வரியைக் குறிக்கிறது. இரண்டாவது எண் சொல்கிறது sed
நாம் பார்க்க விரும்பும் தொடக்கக் கோட்டிற்குப் பிறகு எந்த வரிகள். எண் 2 என்பது ஒவ்வொரு இரண்டாவது வரியையும், 3 என்பது ஒவ்வொரு மூன்றாவது வரியையும் குறிக்கிறது.
பின்வருவனவற்றை நாங்கள் தட்டச்சு செய்கிறோம்:
sed -n '1 ~ 2p' coleridge.txt
நீங்கள் தேடும் உரை கோப்பில் எங்குள்ளது என்பது உங்களுக்கு எப்போதும் தெரியாது, அதாவது வரி எண்கள் எப்போதும் பெரிதும் உதவாது. இருப்பினும், நீங்கள் பயன்படுத்தலாம் sed
பொருந்தும் உரை வடிவங்களைக் கொண்ட வரிகளைத் தேர்ந்தெடுக்க. எடுத்துக்காட்டாக, “மற்றும்” என்று தொடங்கும் அனைத்து வரிகளையும் பிரித்தெடுப்போம்.
கேரட் (^
) வரியின் தொடக்கத்தைக் குறிக்கிறது. எங்கள் தேடல் சொல்லை முன்னோக்கி குறைப்புகளில் இணைப்போம் (/
). “மற்றும்” க்குப் பிறகு நாங்கள் ஒரு இடத்தையும் சேர்ப்போம், எனவே “Android” போன்ற சொற்கள் முடிவில் சேர்க்கப்படாது.
படித்தல் sed
ஸ்கிரிப்ட்கள் முதலில் சற்று கடினமாக இருக்கும். தி / ப
நாம் மேலே பயன்படுத்திய கட்டளைகளில் செய்ததைப் போலவே “அச்சிடு” என்று பொருள். பின்வரும் கட்டளையில், முன்னோக்கி சாய்வு அதற்கு முன்னால்:
sed -n '/ ^ மற்றும் / p' coleridge.txt
“மற்றும்” என்று தொடங்கும் மூன்று வரிகள் கோப்பிலிருந்து பிரித்தெடுக்கப்பட்டு எங்களுக்காக காட்டப்படும்.
மாற்றீடுகளை உருவாக்குதல்
எங்கள் முதல் எடுத்துக்காட்டில், a க்கான பின்வரும் அடிப்படை வடிவமைப்பை நாங்கள் உங்களுக்குக் காண்பித்தோம் sed
மாற்று:
echo howtogonk | sed 's / gonk / geek /'
தி கள்
சொல்கிறது sed
இது ஒரு மாற்று. முதல் சரம் தேடல் முறை, மற்றும் இரண்டாவது அந்த பொருந்திய உரையை மாற்ற விரும்பும் உரை. நிச்சயமாக, எல்லாவற்றையும் லினக்ஸ் போலவே, பிசாசு விவரங்களில் உள்ளது.
“நாள்” இன் அனைத்து நிகழ்வுகளையும் “வாரம்” ஆக மாற்ற நாங்கள் பின்வருவதைத் தட்டச்சு செய்கிறோம், மேலும் கடற்படை மற்றும் அல்பாட்ராஸை பிணைப்பிற்கு அதிக நேரம் கொடுக்கிறோம்:
sed -n 's / day / week / p' coleridge.txt
முதல் வரியில், “நாள்” இன் இரண்டாவது நிகழ்வு மட்டுமே மாற்றப்பட்டுள்ளது. இது எதனால் என்றால் sed
ஒரு வரிக்கு முதல் போட்டியின் பின்னர் நிறுத்தப்படும். உலகளாவிய தேடலைச் செய்வதற்கு, கீழே காட்டப்பட்டுள்ளபடி, வெளிப்பாட்டின் முடிவில் ஒரு “g” ஐ நாம் சேர்க்க வேண்டும், எனவே ஒவ்வொரு வரியிலும் உள்ள அனைத்து போட்டிகளும் செயலாக்கப்படும்:
sed -n 's / day / week / gp' coleridge.txt
இது முதல் வரிசையில் நான்கில் மூன்று பொருந்துகிறது. ஏனெனில் முதல் சொல் “நாள்,” மற்றும் sed
வழக்கு உணர்திறன் கொண்டது, அந்த நிகழ்வு "நாள்" என்று கருதப்படுவதில்லை.
பின்வருவனவற்றை தட்டச்சு செய்கிறோம் நான்
வழக்கு-உணர்வற்ற தன்மையைக் குறிக்க வெளிப்பாட்டின் முடிவில் உள்ள கட்டளைக்கு:
sed -n 's / day / week / gip' coleridge.txt
இது செயல்படுகிறது, ஆனால் எல்லாவற்றிற்கும் நீங்கள் எப்போதும் வழக்கு-உணர்வற்ற தன்மையை இயக்க விரும்பவில்லை. அந்த நிகழ்வுகளில், முறை-குறிப்பிட்ட வழக்கு-உணர்வற்ற தன்மையைச் சேர்க்க நீங்கள் ஒரு ரீஜெக்ஸ் குழுவைப் பயன்படுத்தலாம்.
எடுத்துக்காட்டாக, சதுர அடைப்புக்குறிக்குள் எழுத்துக்களை இணைத்தால் ([]
), அவை “இந்த எழுத்துக்களின் பட்டியலிலிருந்து எந்த எழுத்துக்கும்” என்று விளக்கப்படுகிறது.
நாங்கள் பின்வருவதைத் தட்டச்சு செய்கிறோம், மேலும் குழுவில் “டி” மற்றும் “டி” ஆகியவை அடங்கும், இது “நாள்” மற்றும் “நாள்” ஆகிய இரண்டிற்கும் பொருந்துகிறது என்பதை உறுதிப்படுத்த:
sed -n 's / [Dd] ay / week / gp' coleridge.txt
கோப்பின் பிரிவுகளுக்கு மாற்றீடுகளையும் நாங்கள் கட்டுப்படுத்தலாம். எங்கள் கோப்பில் முதல் வசனத்தில் வித்தியாசமான இடைவெளி உள்ளது என்று சொல்லலாம். முதல் வசனத்தைக் காண பின்வரும் பழக்கமான கட்டளையைப் பயன்படுத்தலாம்:
sed -n '1,4p' coleridge.txt
நாங்கள் இரண்டு இடங்களைத் தேடுவோம், அவற்றை ஒன்றோடு மாற்றுவோம். நாங்கள் இதை உலகளவில் செய்வோம், எனவே நடவடிக்கை முழு வரியிலும் மீண்டும் மீண்டும் நிகழ்கிறது. தெளிவாக இருக்க, தேடல் முறை இடம், விண்வெளி நட்சத்திரம் (*
), மற்றும் மாற்று சரம் ஒரு ஒற்றை இடம். தி 1,4
கோப்பின் முதல் நான்கு வரிகளுக்கு மாற்றாக கட்டுப்படுத்துகிறது.
அதையெல்லாம் ஒன்றாக பின்வரும் கட்டளையில் வைக்கிறோம்:
sed -n '1,4 s / * / / gp' coleridge.txt
இது நன்றாக வேலை செய்கிறது! தேடல் முறைதான் இங்கே முக்கியமானது. நட்சத்திரம் (*
) முந்தைய எழுத்தின் பூஜ்ஜியம் அல்லது அதற்கு மேற்பட்டதைக் குறிக்கிறது, இது ஒரு இடம். எனவே, தேடல் முறை ஒரு இடத்தின் அல்லது அதற்கு மேற்பட்ட சரங்களைத் தேடுகிறது.
பல இடைவெளிகளின் எந்தவொரு வரிசையிலும் ஒரு இடத்தை நாங்கள் மாற்றினால், ஒவ்வொரு வார்த்தைக்கும் இடையில் ஒரு இடைவெளியுடன் கோப்பை வழக்கமான இடைவெளிக்குத் திருப்புவோம். இது சில சந்தர்ப்பங்களில் ஒரு இடத்திற்கு ஒரு இடத்தை மாற்றும், ஆனால் இது எதையும் மோசமாக பாதிக்காது - நாங்கள் இன்னும் விரும்பிய முடிவைப் பெறுவோம்.
பின்வருவனவற்றை நாங்கள் தட்டச்சு செய்து, தேடல் வடிவத்தை ஒரே இடத்திற்கு குறைத்தால், நாங்கள் ஏன் இரண்டு இடங்களை சேர்க்க வேண்டும் என்பதை உடனடியாக பார்ப்பீர்கள்:
sed -n '1,4 s / * / / gp' coleridge.txt
முந்தைய எழுத்துக்குறி பூஜ்ஜியத்திற்கு அல்லது அதற்கு மேற்பட்டவற்றுடன் நட்சத்திரம் பொருந்துவதால், அது ஒரு இடைவெளி இல்லாத ஒவ்வொரு எழுத்தையும் “பூஜ்ஜிய இடமாக” பார்க்கிறது மற்றும் அதற்கு மாற்றாக பொருந்தும்.
இருப்பினும், தேடல் வடிவத்தில் இரண்டு இடைவெளிகளை நாங்கள் சேர்த்தால்,sed
மாற்றீட்டைப் பயன்படுத்துவதற்கு முன்பு குறைந்தது ஒரு விண்வெளி எழுத்தை கண்டுபிடிக்க வேண்டும். இது இடைவெளியில்லாத எழுத்துக்கள் தீண்டப்படாமல் இருப்பதை உறுதி செய்கிறது.
பின்வருவனவற்றைப் பயன்படுத்தி தட்டச்சு செய்கிறோம் -e
(வெளிப்பாடு) நாங்கள் முன்பு பயன்படுத்தினோம், இது இரண்டு அல்லது அதற்கு மேற்பட்ட மாற்றீடுகளை ஒரே நேரத்தில் செய்ய அனுமதிக்கிறது:
sed -n -e 's / motion / flutter / gip' -e 's / sea / gutter / gip' coleridge.txt
அரைக்காற்புள்ளியைப் பயன்படுத்தினால் அதே முடிவை நாம் அடையலாம் (;
) இரண்டு வெளிப்பாடுகளையும் பிரிக்க, அவ்வாறு:
sed -n 's / motion / flutter / gip; s / sea / gutter / gip' coleridge.txt
பின்வரும் கட்டளையில் “வாரம்” என்பதற்கு “நாள்” என்பதை மாற்றும்போது, “ஒரு நாள்” என்ற வெளிப்பாட்டில் “நாள்” என்பதும் மாற்றப்பட்டது:
sed -n 's / [Dd] ay / week / gp' coleridge.txt
இதைத் தடுக்க, மற்றொரு வடிவத்துடன் பொருந்தக்கூடிய வரிகளில் மட்டுமே மாற்றுகளை முயற்சிக்க முடியும். தொடக்கத்தில் ஒரு தேடல் முறை இருக்க வேண்டும் என்ற கட்டளையை நாங்கள் மாற்றினால், அந்த வடிவத்துடன் பொருந்தக்கூடிய வரிகளில் மட்டுமே செயல்படுவோம்.
எங்கள் பொருந்தக்கூடிய வடிவத்தை “பின்” என்ற வார்த்தையாக மாற்ற பின்வருவனவற்றை தட்டச்சு செய்கிறோம்:
sed -n '/ after / s / [Dd] ay / week / gp' coleridge.txt
அது நாம் விரும்பும் பதிலை அளிக்கிறது.
மேலும் சிக்கலான பதிலீடுகள்
கோலிரிட்ஜுக்கு ஒரு இடைவெளி மற்றும் பயன்பாட்டைக் கொடுப்போம் sed
இலிருந்து பெயர்களைப் பிரித்தெடுக்க etc / passwd
கோப்பு.
இதைச் செய்வதற்கு குறுகிய வழிகள் உள்ளன (பின்னர் அதைப் பற்றி மேலும்), ஆனால் மற்றொரு கருத்தை நிரூபிக்க இங்கே நீண்ட வழியைப் பயன்படுத்துவோம். ஒரு தேடல் வடிவத்தில் பொருந்திய ஒவ்வொரு உருப்படியையும் (subexpressions என அழைக்கப்படுகிறது) எண்ணலாம் (அதிகபட்சம் ஒன்பது உருப்படிகள் வரை). இந்த எண்களை நீங்கள் பயன்படுத்தலாம்sed
குறிப்பிட்ட துணை வெளிப்பாடுகளைக் குறிக்க கட்டளைகள்.
நீங்கள் அடைப்புக்குறிக்குள் துணை வெளிப்பாட்டை இணைக்க வேண்டும் [()
] இது வேலை செய்ய. அடைப்புக்குறிப்புகளும் பின்தங்கிய குறைப்புக்கு முன்னதாக இருக்க வேண்டும் (\
) அவர்கள் ஒரு சாதாரண பாத்திரமாக கருதப்படுவதைத் தடுக்க.
இதைச் செய்ய, நீங்கள் பின்வருவனவற்றைத் தட்டச்சு செய்கிறீர்கள்:
sed 's / \ ([^:] * \). * / \ 1 /' / etc / passwd
இதை உடைப்போம்:
sed 's /
: திsed
கட்டளை மற்றும் மாற்று வெளிப்பாட்டின் ஆரம்பம்.\(
: தொடக்க அடைப்பு [(
] துணை வெளிப்பாட்டை இணைத்தல், அதற்கு பின் ஒரு பின்சாய்வுக்கோடானது (\
).[^:]*
: தேடல் காலத்தின் முதல் துணை வெளிப்பாடு சதுர அடைப்புக்குறிக்குள் ஒரு குழுவைக் கொண்டுள்ளது. கேரட் (^
) என்பது ஒரு குழுவில் பயன்படுத்தும்போது “இல்லை” என்று பொருள். ஒரு குழு என்பது பெருங்குடல் இல்லாத எந்த எழுத்தையும் குறிக்கிறது (:
) ஒரு போட்டியாக ஏற்றுக்கொள்ளப்படும்.\)
: இறுதி அடைப்பு [)
] முந்தைய பின்சாய்வுக்கோட்டுடன் (\
)..*
: இந்த இரண்டாவது தேடல் துணை வெளிப்பாடு என்பது "எந்த எழுத்து மற்றும் அவற்றில் எத்தனை" என்பதாகும்./\1
: வெளிப்பாட்டின் மாற்று பகுதி உள்ளது1
பின்சாய்வுக்கோடானது (\
). இது முதல் துணை வெளிப்பாட்டுடன் பொருந்தக்கூடிய உரையைக் குறிக்கிறது./'
: நிறைவு முன்னோக்கி-சாய்வு (/
) மற்றும் ஒற்றை மேற்கோள் ('
) நிறுத்தவும்sed
கட்டளை.
இதன் பொருள் என்னவென்றால், பெருங்குடல் இல்லாத எந்த எழுத்துக்களின் சரத்தையும் நாங்கள் தேடப்போகிறோம் (:
), இது பொருந்தும் உரையின் முதல் நிகழ்வாக இருக்கும். பின்னர், அந்த வரியில் வேறு எதையும் நாங்கள் தேடுகிறோம், இது உரை பொருந்தும் இரண்டாவது நிகழ்வாகும். முதல் வரியுடன் பொருந்திய உரையுடன் முழு வரியையும் மாற்றப் போகிறோம்.
ஒவ்வொரு வரியும் / etc / passwd
கோப்பு பெருங்குடல் நிறுத்தப்பட்ட பயனர்பெயருடன் தொடங்குகிறது. எல்லாவற்றையும் முதல் பெருங்குடல் வரை பொருத்துகிறோம், பின்னர் அந்த மதிப்பை முழு வரியிலும் மாற்றுகிறோம். எனவே, பயனர்பெயர்களை நாங்கள் தனிமைப்படுத்தியுள்ளோம்.
அடுத்து, அடைப்புக்குறிக்குள் இரண்டாவது துணை வெளிப்பாட்டை இணைப்போம் [()
] எனவே அதை எண்ணிலும் குறிப்பிடலாம். நாங்கள் மாற்றுவோம் \1
உடன் \2
. எங்கள் கட்டளை இப்போது முதல் பெருங்குடலில் இருந்து எல்லாவற்றையும் கொண்டு முழு வரியையும் மாற்றும் (:
) வரியின் இறுதியில்.
பின்வருவனவற்றை நாங்கள் தட்டச்சு செய்கிறோம்:
sed 's / \ ([^:] * \) \ (. * \) / \ 2 /' / etc / passwd
அந்த சிறிய மாற்றங்கள் கட்டளையின் பொருளைத் தலைகீழாக மாற்றுகின்றன, மேலும் பயனர்பெயர்களைத் தவிர எல்லாவற்றையும் பெறுகிறோம்.
இப்போது, இதைச் செய்வதற்கான விரைவான மற்றும் எளிதான வழியைப் பார்ப்போம்.
எங்கள் தேடல் சொல் முதல் பெருங்குடலில் இருந்து (:
) வரியின் இறுதியில். ஏனெனில் எங்கள் மாற்று வெளிப்பாடு காலியாக உள்ளது (//
), பொருந்திய உரையை எதையும் மாற்ற மாட்டோம்.
எனவே, பின்வருவனவற்றை தட்டச்சு செய்கிறோம், முதல் பெருங்குடலிலிருந்து எல்லாவற்றையும் துண்டிக்கிறோம் (:
) வரியின் முடிவில், பயனர்பெயர்களை மட்டும் விட்டுவிடுகிறது:
sed 's /:.*// "/ etc / passwd
ஒரே கட்டளையில் முதல் மற்றும் இரண்டாவது போட்டிகளைக் குறிப்பிடும் ஒரு உதாரணத்தைப் பார்ப்போம்.
எங்களிடம் காற்புள்ளிகளின் கோப்பு கிடைத்துள்ளது (,
) முதல் மற்றும் கடைசி பெயர்களைப் பிரித்தல். அவற்றை "கடைசி பெயர், முதல் பெயர்" என்று பட்டியலிட விரும்புகிறோம். நாம் பயன்படுத்தலாம்பூனை
, கீழே காட்டப்பட்டுள்ளபடி, கோப்பில் என்ன இருக்கிறது என்பதைக் காண:
cat geeks.txt
நிறைய பிடிக்கும் sed
கட்டளைகள், இந்த அடுத்தது முதலில் அசாத்தியமாகத் தோன்றலாம்:
sed 's / ^ \ (. * \), \ (. * \) $ / \ 2, \ 1 / g' geeks.txt
இது நாங்கள் பயன்படுத்திய மற்றவர்களைப் போன்ற மாற்று கட்டளை, மேலும் தேடல் முறை மிகவும் எளிதானது. நாங்கள் அதை கீழே உடைப்போம்:
sed 's /
: சாதாரண மாற்று கட்டளை.^
: ஏனெனில் காரெட் ஒரு குழுவில் இல்லை ([]
), இதன் பொருள் “வரியின் ஆரம்பம்”.\(.*\),
: முதல் துணை வெளிப்பாடு எந்த எழுத்துகளின் எண்ணிக்கையும் ஆகும். இது அடைப்புக்குறிக்குள் இணைக்கப்பட்டுள்ளது [()
], ஒவ்வொன்றும் பின்சாய்வுக்கோடால் முந்தியவை (\
) எனவே அதை எண்ணால் குறிப்பிடலாம். எங்கள் முழு தேடல் முறையும் இதுவரை வரியின் தொடக்கத்திலிருந்து முதல் கமா வரை தேடலாக மொழிபெயர்க்கப்பட்டுள்ளது (,
) எந்த எழுத்துகளின் எண்ணிக்கையிலும்.\(.*\)
: அடுத்த துணை வெளிப்பாடு (மீண்டும்) எந்தவொரு எழுத்தின் எண்ணிக்கையும் ஆகும். இது அடைப்புக்குறிக்குள் இணைக்கப்பட்டுள்ளது [()
], இவை இரண்டும் பின்சாய்வுக்கோடானது (\
) எனவே பொருந்தும் உரையை எண்ணால் குறிப்பிடலாம்.$/
: டாலர் அடையாளம் ($
) வரியின் முடிவைக் குறிக்கிறது, மேலும் எங்கள் தேடலை வரியின் முடிவில் தொடர அனுமதிக்கும். டாலர் அடையாளத்தை அறிமுகப்படுத்த இதைப் பயன்படுத்தினோம். நட்சத்திரக் குறியீடாக எங்களுக்கு இது உண்மையில் தேவையில்லை (*
) இந்த சூழ்நிலையில் வரியின் முடிவில் செல்லும். முன்னோக்கி சாய்வு (/
) தேடல் முறை பகுதியை நிறைவு செய்கிறது.\ 2, \ 1 / g '
: அடைப்புக்குறிக்குள் எங்கள் இரண்டு துணை வெளிப்பாடுகளையும் இணைத்துள்ளதால், அவை இரண்டையும் அவற்றின் எண்களால் குறிப்பிடலாம். நாம் வரிசையை மாற்றியமைக்க விரும்புவதால், அவற்றை நாம் தட்டச்சு செய்கிறோம்இரண்டாவது போட்டி, முதல் போட்டி
. எண்களுக்கு முன்னதாக ஒரு பின்சாய்வுக்கோடானது (\
)./ கிராம்
: இது ஒவ்வொரு கட்டத்திலும் உலகளவில் செயல்பட எங்கள் கட்டளையை செயல்படுத்துகிறது.geeks.txt
: நாங்கள் பணிபுரியும் கோப்பு.
நீங்கள் கட் கட்டளையையும் பயன்படுத்தலாம் (c
) உங்கள் தேடல் முறைக்கு பொருந்தக்கூடிய முழு வரிகளையும் மாற்றுவதற்கு. அதில் “கழுத்து” என்ற வார்த்தையுடன் ஒரு வரியைத் தேட பின்வருவதைத் தட்டச்சு செய்து, அதை புதிய உரையுடன் மாற்றுவோம்:
sed '/ neck / c என் மணிக்கட்டில் சுற்றி' coleridge.txt
எங்கள் புதிய வரி இப்போது எங்கள் சாற்றின் கீழே தோன்றும்.
கோடுகள் மற்றும் உரையைச் செருகுவது
எங்கள் கோப்பில் புதிய வரிகளையும் உரையையும் செருகலாம். பொருந்தக்கூடியவற்றுக்குப் பிறகு புதிய வரிகளைச் செருக, நாங்கள் இணைப்பு கட்டளையைப் பயன்படுத்துவோம் (a
).
நாங்கள் வேலை செய்யப் போகும் கோப்பு இங்கே:
cat geeks.txt
இதைப் பின்பற்றுவதை எளிதாக்குவதற்கு வரிகளை எண்ணியுள்ளோம்.
“அவர்” என்ற வார்த்தையைக் கொண்ட வரிகளைத் தேட பின்வரும்வற்றைத் தட்டச்சு செய்து அவற்றின் கீழே ஒரு புதிய வரியைச் செருகுவோம்:
sed '/ He / a -> செருகப்பட்டது!' geeks.txt
நாங்கள் பின்வருவனவற்றை தட்டச்சு செய்து செருகு கட்டளையை உள்ளடக்குகிறோம் (நான்
) பொருந்தும் உரையைக் கொண்டிருக்கும் புதிய வரியைச் செருக:
sed '/ He / i -> செருகப்பட்டது!' geeks.txt
நாம் ஆம்பர்சண்டைப் பயன்படுத்தலாம் (&
), இது பொருந்திய வரியில் புதிய உரையைச் சேர்க்க, அசல் பொருந்திய உரையைக் குறிக்கிறது. \1
, \2
, மற்றும் பல, பொருந்தும் துணை வெளிப்பாடுகளைக் குறிக்கும்.
ஒரு வரியின் தொடக்கத்தில் உரையைச் சேர்க்க, எங்கள் புதிய உரையை அசல் வரியுடன் இணைக்கும் மாற்று விதிமுறையுடன் இணைந்து, வரியில் உள்ள எல்லாவற்றிற்கும் பொருந்தக்கூடிய மாற்று கட்டளையைப் பயன்படுத்துவோம்.
இவை அனைத்தையும் செய்ய, பின்வருவனவற்றை தட்டச்சு செய்கிறோம்:
sed 's /.*/--> செருகப்பட்டது & /' geeks.txt
பின்வருவனவற்றை நாங்கள் தட்டச்சு செய்கிறோம் ஜி
கட்டளை, இது ஒவ்வொரு வரிக்கும் இடையில் ஒரு வெற்று கோட்டை சேர்க்கும்:
sed 'G' geeks.txt
நீங்கள் இரண்டு அல்லது அதற்கு மேற்பட்ட வெற்று வரிகளைச் சேர்க்க விரும்பினால், நீங்கள் பயன்படுத்தலாம் ஜி; ஜி
, ஜி; ஜி; ஜி
, மற்றும் பல.
கோடுகளை நீக்குகிறது
நீக்கு கட்டளை (d
) ஒரு தேடல் முறைக்கு பொருந்தக்கூடிய வரிகளை நீக்குகிறது அல்லது வரி எண்கள் அல்லது வரம்புகளுடன் குறிப்பிடப்பட்டவை.
எடுத்துக்காட்டாக, மூன்றாவது வரியை நீக்க, பின்வருவனவற்றை தட்டச்சு செய்கிறோம்:
sed '3d' geeks.txt
நான்கு முதல் ஐந்து வரிகளின் வரம்பை நீக்க, பின்வருவனவற்றை தட்டச்சு செய்கிறோம்:
sed '4,5d' geeks.txt
வரம்பிற்கு வெளியே வரிகளை நீக்க, நாங்கள் ஆச்சரியக்குறியைப் பயன்படுத்துகிறோம் (!
), கீழே காட்டப்பட்டுள்ளது போல்:
sed '6,7! d' geeks.txt
உங்கள் மாற்றங்களைச் சேமிக்கிறது
இதுவரை, எங்கள் முடிவுகள் அனைத்தும் முனைய சாளரத்தில் அச்சிடப்பட்டுள்ளன, ஆனால் அவற்றை இன்னும் எங்கும் சேமிக்கவில்லை. இவற்றை நிரந்தரமாக்க, உங்கள் மாற்றங்களை அசல் கோப்பில் எழுதலாம் அல்லது அவற்றை புதியதாக திருப்பி விடலாம்.
உங்கள் அசல் கோப்பை மேலெழுத சில எச்சரிக்கை தேவை. உங்கள் என்றால் sed
கட்டளை தவறு, செயல்தவிர்க்க கடினமாக இருக்கும் அசல் கோப்பில் சில மாற்றங்களை நீங்கள் செய்யலாம்.
சில மன அமைதிக்கு, sed
அசல் கோப்பின் கட்டளையை இயக்குவதற்கு முன்பு அதன் காப்புப்பிரதியை உருவாக்க முடியும்.
நீங்கள் இடத்திலுள்ள விருப்பத்தைப் பயன்படுத்தலாம் (-நான்
) சொல்லsed
அசல் கோப்பில் மாற்றங்களை எழுத, ஆனால் அதற்கு ஒரு கோப்பு நீட்டிப்பைச் சேர்த்தால், sed
அசல் கோப்பை புதியதாக காப்புப் பிரதி எடுக்கும். இது அசல் கோப்பின் அதே பெயரைக் கொண்டிருக்கும், ஆனால் புதிய கோப்பு நீட்டிப்புடன்.
நிரூபிக்க, “அவர்” என்ற வார்த்தையைக் கொண்டிருக்கும் எந்தவொரு வரிகளையும் தேடுவோம், அவற்றை நீக்குவோம். BAK நீட்டிப்பைப் பயன்படுத்தி எங்கள் அசல் கோப்பை புதியதாக காப்புப் பிரதி எடுப்போம்.
இவை அனைத்தையும் செய்ய, பின்வருவனவற்றை தட்டச்சு செய்கிறோம்:
sed -i'.bak '' /^.*He.*$/d 'geeks.txt
எங்கள் காப்பு கோப்பு மாறாமல் இருப்பதை உறுதிப்படுத்த பின்வரும்வற்றை தட்டச்சு செய்கிறோம்:
cat geeks.txt.bak
வெளியீட்டை ஒரு புதிய கோப்பிற்கு திருப்பி, இதேபோன்ற முடிவை அடைய பின்வருவனவற்றை நாம் தட்டச்சு செய்யலாம்:
sed -i'.bak '' /^.*He.*$/d 'geeks.txt> new_geeks.txt
நாம் பயன்படுத்த பூனை
கீழே காட்டப்பட்டுள்ளபடி, புதிய கோப்பில் மாற்றங்கள் எழுதப்பட்டன என்பதை உறுதிப்படுத்த:
பூனை new_geeks.txt
அதையெல்லாம் மயக்கியது
நீங்கள் கவனித்தபடி, இந்த விரைவான ப்ரைமர் கூட இயங்கும் sed
மிகவும் நீளமானது. இந்த கட்டளைக்கு நிறைய இருக்கிறது, மேலும் இதை நீங்கள் செய்ய முடியும்.
இருப்பினும், இந்த அடிப்படைக் கருத்துக்கள் நீங்கள் தொடர்ந்து கற்றுக் கொள்ளும்போது நீங்கள் உருவாக்கக்கூடிய ஒரு வலுவான அடித்தளத்தை வழங்கியுள்ளன.