పరిచయం:
బాష్లోని ఫైల్లతో పని చేస్తున్నప్పుడు, మీరు తరచుగా ఫైల్ పేరును దాని పొడిగింపు నుండి వేరు చేయాల్సి ఉంటుంది. ఒక సాధారణ విధానం `కట్` ఆదేశాన్ని ఉపయోగిస్తుంది, అయితే ఈ పద్ధతి బహుళ కాలాలను కలిగి ఉన్న ఫైల్ పేర్లతో విఫలమవుతుంది.
ఉదాహరణకు, `a.b.js` వంటి ఫైల్ పేరు `a.b` మరియు `js`కి బదులుగా `a` మరియు `b.js`గా తప్పుగా విభజించబడింది. పైథాన్ `os.path.splitext()`తో సులభమైన పరిష్కారాన్ని అందించినప్పటికీ, పైథాన్ని ఉపయోగించడం ఎల్లప్పుడూ అత్యంత సమర్థవంతమైన ఎంపిక కాకపోవచ్చు. ఈ వ్యాసం బాష్లో ఈ పనిని సాధించడానికి మెరుగైన పద్ధతులను అన్వేషిస్తుంది.
| ఆదేశం | వివరణ |
|---|---|
| ${variable%.*} | ఫైల్ పేరు నుండి పొడిగింపును తీసివేయడానికి పారామీటర్ విస్తరణ. |
| ${variable##*.} | ఫైల్ పేరు నుండి పొడిగింపును సంగ్రహించడానికి పారామీటర్ విస్తరణ. |
| awk -F. | ఫీల్డ్ సెపరేటర్ని ఒక పీరియడ్కు సెట్ చేస్తుంది, ఫైల్ పేరును విభజించడానికి ఉపయోగించబడుతుంది. |
| OFS="." | awkలో అవుట్పుట్ ఫీల్డ్ సెపరేటర్, పొడిగింపు లేకుండా ఫైల్ పేరును పునర్నిర్మించడానికి ఉపయోగించబడుతుంది. |
| NF-- | awkలో ఫీల్డ్ల సంఖ్యను ఒకటి చొప్పున తగ్గిస్తుంది, పొడిగింపును సమర్థవంతంగా తొలగిస్తుంది. |
| ${BASH_REMATCH} | బాష్లోని సాధారణ వ్యక్తీకరణ నుండి మ్యాచ్లను కలిగి ఉన్న శ్రేణి. |
| local variable | బాష్లోని ఫంక్షన్లో స్థానిక స్కోప్తో వేరియబుల్ని ప్రకటిస్తుంది. |
బాష్ సొల్యూషన్స్ యొక్క వివరణాత్మక విభజన
అందించిన స్క్రిప్ట్లు ఫైల్ పేరు మరియు బాష్లో దాని పొడిగింపును వేరు చేయడానికి వివిధ పద్ధతులను అందిస్తాయి. మొదటి స్క్రిప్ట్ బాష్ పారామీటర్ విస్తరణను ఉపయోగిస్తుంది. వేరియబుల్ ${FILE%.*} చివరి పీరియడ్ నుండి స్ట్రింగ్ చివరి వరకు ప్రతిదీ తీసివేయడం ద్వారా పొడిగింపును తొలగిస్తుంది ${FILE##*.} చివరి వ్యవధి తర్వాత ప్రతిదీ తీసుకోవడం ద్వారా పొడిగింపును సంగ్రహిస్తుంది. ఈ పద్ధతి చాలా ఫైల్ పేరు నిర్మాణాలకు సూటిగా మరియు సమర్థవంతమైనది. రెండవ స్క్రిప్ట్ ఉపయోగించుకుంటుంది awk, Unix-వంటి పరిసరాలలో శక్తివంతమైన టెక్స్ట్-ప్రాసెసింగ్ సాధనం. ఫీల్డ్ సెపరేటర్ని ఉపయోగించి వ్యవధికి సెట్ చేయడం ద్వారా -F., ఇది ఫైల్ పేరును భాగాలుగా విభజించడానికి అనుమతిస్తుంది. అవుట్పుట్ ఫీల్డ్ సెపరేటర్, OFS=".", మరియు ఫీల్డ్ల సంఖ్యను తగ్గించడం NF-- ఫైల్ పేరును పొడిగింపు లేకుండా మళ్లీ సమీకరించే పద్ధతులు.
మూడవ స్క్రిప్ట్ బాష్లో సాధారణ వ్యక్తీకరణలను ఉపయోగిస్తుంది, పరపతిని అందిస్తుంది ${BASH_REMATCH} రీజెక్స్ మ్యాచ్లో సమూహాలను సంగ్రహించడానికి. ఈ స్క్రిప్ట్ ఫైల్ పేరును రెండు సమూహాలుగా విభజించే నమూనాను ఉపయోగిస్తుంది: ఒకటి బేస్ పేరు మరియు మరొకటి పొడిగింపు కోసం. చివరగా, కస్టమ్ ఫంక్షన్ స్క్రిప్ట్ ఒక ఫంక్షన్లోని పారామీటర్ విస్తరణ లాజిక్ను ఎన్క్యాప్సులేట్ చేస్తుంది, కోడ్ పునర్వినియోగం మరియు రీడబిలిటీని మెరుగుపరుస్తుంది. ఇది ఉపయోగిస్తుంది local variable ఫంక్షన్లో వేరియబుల్స్ని స్కోప్డ్గా ఉంచడానికి డిక్లరేషన్లు, పెద్ద స్క్రిప్ట్లలో అనాలోచిత దుష్ప్రభావాలను నివారిస్తాయి. ప్రతి పద్ధతి ఒకే సమస్యను పరిష్కరించడానికి విభిన్న విధానాన్ని ప్రదర్శిస్తుంది, బాష్ స్క్రిప్టింగ్ యొక్క బహుముఖ ప్రజ్ఞ మరియు శక్తిని ప్రదర్శిస్తుంది.
బాష్లో పారామీటర్ విస్తరణను ఉపయోగించడం
బాష్ స్క్రిప్టింగ్
#!/bin/bash# Script to extract filename and extension using parameter expansionFILE="a.b.js"FILENAME="${FILE%.*}"EXTENSION="${FILE##*.}"echo "Filename: $FILENAME"echo "Extension: $EXTENSION"
ఫైల్ పేరు మరియు పొడిగింపును వేరు చేయడానికి Awkని ఉపయోగించడం
Awk తో బాష్
#!/bin/bash# Script to extract filename and extension using awkFILE="a.b.js"FILENAME=$(echo "$FILE" | awk -F. '{OFS="."; NF--; print $0}')EXTENSION=$(echo "$FILE" | awk -F. '{print $NF}')echo "Filename: $FILENAME"echo "Extension: $EXTENSION"
బాష్లో సాధారణ వ్యక్తీకరణలను ఉపయోగించడం
రీజెక్స్తో బాష్ స్క్రిప్టింగ్
#!/bin/bash# Script to extract filename and extension using regexFILE="a.b.js"[[ "$FILE" =~ (.*)\.(.*) ]]FILENAME=${BASH_REMATCH[1]}EXTENSION=${BASH_REMATCH[2]}echo "Filename: $FILENAME"echo "Extension: $EXTENSION"
బాష్లో కస్టమ్ ఫంక్షన్ని ఉపయోగించడం
కస్టమ్ ఫంక్షన్తో బాష్ స్క్రిప్టింగ్
#!/bin/bash# Function to extract filename and extensionextract_filename_extension() {local file="$1"echo "Filename: ${file%.*}"echo "Extension: ${file##*.}"}# Call the function with a fileextract_filename_extension "a.b.js"
బాష్లో ఫైల్ మానిప్యులేషన్ కోసం ప్రత్యామ్నాయ పద్ధతులను అన్వేషించడం
ఇప్పటికే చర్చించిన పద్ధతులకు మించి, ఫైల్ పేర్లు మరియు పొడిగింపులను మార్చడానికి బాష్లో ఇతర ఉపయోగకరమైన పద్ధతులు ఉన్నాయి. అటువంటి పద్ధతిని ఉపయోగించడంలో ఒకటి basename మరియు dirname ఆదేశాలు. basename ఒక మార్గం నుండి ఫైల్ పేరును సంగ్రహించడానికి ఉపయోగించవచ్చు dirname డైరెక్టరీ మార్గాన్ని తిరిగి పొందుతుంది. ఈ ఆదేశాలను పారామీటర్ విస్తరణతో కలపడం వలన ఫైల్ పేర్లు మరియు పొడిగింపులను సమర్థవంతంగా వేరు చేయవచ్చు. ఉదాహరణకు, ఉపయోగించడం basename "$FILE" ".${FILE##*.}" ఫైల్ పేరు నుండి పొడిగింపును తొలగిస్తుంది. ఫైల్ పేర్లతో కాకుండా పూర్తి ఫైల్ మార్గాలతో పని చేస్తున్నప్పుడు ఈ విధానం ప్రత్యేకంగా ఉపయోగపడుతుంది.
మరొక పద్ధతిని ఉపయోగించడం ఉంటుంది sed, వచనాన్ని ఫిల్టర్ చేయడానికి మరియు మార్చడానికి శక్తివంతమైన స్ట్రీమ్ ఎడిటర్. తగిన సాధారణ వ్యక్తీకరణలను రూపొందించడం ద్వారా, sed ఫైల్ పేరు మరియు పొడిగింపును వేరు చేయవచ్చు. ఉదాహరణకు, ఆదేశం echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' ఫైల్ పేరు మరియు పొడిగింపును విభజించి, వాటిని ప్రత్యేక సంగ్రహ సమూహాలలో ఉంచుతుంది. ఈ సాంకేతికత అనువైనది మరియు క్లిష్టమైన ఫైల్ పేరు నిర్మాణాలను నిర్వహించగలదు. ఈ అదనపు సాధనాలు మరియు పద్ధతులను అన్వేషించడం వలన Bashలో ఫైల్ డేటాను మార్చగల మీ సామర్థ్యాన్ని విస్తరిస్తుంది, వివిధ స్క్రిప్టింగ్ దృశ్యాలకు బలమైన పరిష్కారాలను అందిస్తుంది.
బాష్ ఫైల్ మానిప్యులేషన్పై తరచుగా అడిగే ప్రశ్నలు
- యొక్క ప్రయోజనం ఏమిటి ${FILE%.*} కమాండ్?
- ఇది చివరి వ్యవధి తర్వాత ప్రతిదీ తీసివేయడం ద్వారా ఫైల్ పేరు నుండి పొడిగింపును తొలగిస్తుంది.
- ఎలా చేస్తుంది ${FILE##*.} కమాండ్ వర్క్?
- ఇది ఫైల్ పేరులోని చివరి వ్యవధి తర్వాత ప్రతిదీ తీసుకోవడం ద్వారా పొడిగింపును సంగ్రహిస్తుంది.
- దేనిని awk -F. అందించిన స్క్రిప్ట్లో చేయాలా?
- ఇది ఫీల్డ్ సెపరేటర్ను ఒక కాలానికి సెట్ చేస్తుంది, ఫైల్ పేరును భాగాలుగా విభజించడానికి అనుమతిస్తుంది.
- ఎందుకు వాడాలి NF-- ఒక లో awk స్క్రిప్ట్?
- ఇది ఫీల్డ్ల సంఖ్యను ఒకటిగా తగ్గిస్తుంది, ఫైల్ పేరు నుండి పొడిగింపును సమర్థవంతంగా తొలగిస్తుంది.
- ఫైల్ పేరు మరియు పొడిగింపును సంగ్రహించడంలో సాధారణ వ్యక్తీకరణలు ఎలా సహాయపడతాయి?
- అవి నమూనా సరిపోలిక మరియు సమూహానికి అనుమతిస్తాయి, ఇది ఫైల్ పేరులోని వివిధ భాగాలను వేరు చేయగలదు.
- బాష్లో కస్టమ్ ఫంక్షన్ని ఉపయోగించడం వల్ల ప్రయోజనం ఏమిటి?
- కస్టమ్ ఫంక్షన్ కోడ్ పునర్వినియోగం మరియు రీడబిలిటీని మెరుగుపరుస్తుంది, స్క్రిప్ట్లను మరింత మాడ్యులర్గా చేస్తుంది.
- ఎలా చేస్తుంది basename ఫైల్ పేర్లతో సహాయం చేయాలా?
- ఇది పూర్తి ఫైల్ మార్గం నుండి ఫైల్ పేరును సంగ్రహిస్తుంది, ఐచ్ఛికంగా పొడిగింపును తీసివేస్తుంది.
- చెయ్యవచ్చు sed ఫైల్ పేరు మానిప్యులేషన్ కోసం ఉపయోగించబడుతుందా?
- అవును, sed ఫైల్ పేర్ల భాగాలను మార్చడానికి మరియు వేరు చేయడానికి సాధారణ వ్యక్తీకరణలను ఉపయోగించవచ్చు.
ఫైల్ పేరు మరియు పొడిగింపు సంగ్రహణ కోసం పరిష్కారాలను చుట్టడం
ముగింపులో, బాష్లో ఫైల్ పేర్లు మరియు పొడిగింపులను సంగ్రహించడం వివిధ పద్ధతుల ద్వారా సమర్థవంతంగా సాధించవచ్చు, ప్రతి ఒక్కటి విభిన్న అవసరాలు మరియు ప్రాధాన్యతలకు సరిపోతాయి. పారామీటర్ విస్తరణ, awk, sed లేదా అనుకూల ఫంక్షన్లను ఉపయోగించినా, ఈ పద్ధతులు అనువైన మరియు సమర్థవంతమైన పరిష్కారాలను అందిస్తాయి. ఈ ఆదేశాలను అర్థం చేసుకోవడం మరియు ఉపయోగించడం వలన స్క్రిప్ట్లు ఫైల్ పేర్లను బహుళ కాలాలు మరియు ఇతర సంక్లిష్టతలతో లోపం లేకుండా నిర్వహించగలవని నిర్ధారిస్తుంది.