විශේෂිත නූලක් අඩංගු පෙළ ගොනුවක ඇති සියලුම පේළි මකා දැමීමට මම sed භාවිතා කරන්නේ කෙසේද?
විශේෂිත නූලක් අඩංගු පෙළ ගොනුවක ඇති සියලුම පේළි මකා දැමීමට මම sed භාවිතා කරන්නේ කෙසේද?
Answers:
රේඛාව ඉවත් කර ප්රතිදානය සම්මතයෙන් මුද්රණය කිරීම සඳහා:
sed '/pattern to match/d' ./infileගොනුව කෙලින්ම වෙනස් කිරීමට - BSD sed සමඟ ක්රියා නොකරයි:
sed -i '/pattern to match/d' ./infileඑකම, නමුත් BSD sed (Mac OS X සහ FreeBSD) සඳහා - GNU sed සමඟ ක්රියා නොකරයි:
sed -i '' '/pattern to match/d' ./infileගොනුව කෙලින්ම වෙනස් කිරීමට (සහ උපස්ථයක් සාදන්න) - BSD සහ GNU sed සමඟ ක්රියා කරයි:
sed -i.bak '/pattern to match/d' ./infilesed '/pattern to match/d' ./infile > ./newfileයැවිය යුතුය. එසේ නැතහොත් ඔබට ස්ථානීය සංස්කරණයක් කිරීමට අවශ්ය නම් ඔබට -iධජය ඇතුලත් කිරීමට එකතු කළ හැකිය sed -i '/pattern to match/d' ./infile. -iධජයට GNU sed අවශ්ය වන අතර එය අතේ ගෙන යා නොහැකි බව සලකන්න
                    sed -i.backup '/pattern to match/d' ./infile) එමඟින් ස්ථානීය සංස්කරණයන් මට හමු විය.
                    sedඅනුවාදය පාලනය නොකරන ඕනෑම ගොනු වලට විධාන යොදන්න එපා .
                    sed -i '' '/pattern/d' ./infile.
                    විශේෂිත නූල් සහිත රේඛා මකා දැමීමට තවත් බොහෝ ක්රම තිබේ sed:
awk '!/pattern/' file > temp && mv temp fileruby -i.bak -ne 'print if not /test/' fileperl -ni.bak -e "print unless /pattern/" filewhile read -r line
do
  [[ ! $line =~ pattern ]] && echo "$line"
done <file > o
mv o filegrep -v "pattern" file > temp && mv temp fileඇත්ත වශයෙන්ම sed(ප්රතිලෝම මුද්රණය සත්ය මකාදැමීමට වඩා වේගවත් වේ):
sed -n '/pattern/!p' filesedඋදාහරණය වෙනස් හැසිරීම් ඇති, එය පමණක් greps! එය වැනි දෙයක් විය යුතුය   sed -n -i '/pattern/!p' file.
                    grep -v "pattern" file > temp; mv temp fileප්රතිලාභ අගය අනුව වෙනත් උදාහරණ කිහිපයකට මෙය අදාළ වේ.
                    seq -f %f 10000000 >foo.txt. sed d: time sed -i '' '/6543210/d' foo.txtතාත්වික 0m9.294s. sed! p: time sed -i '' -n '/6543210/!p' foo.txtතාත්වික 0m13.671s. (කුඩා ලිපිගොනු සඳහා, වෙනස විශාල වේ.)
                    ගොනුවක ඇති රේඛා ආදේශ කිරීමට ඔබට sed භාවිතා කළ හැකිය. කෙසේ වෙතත්, ප්රතිලෝම සඳහා grep දෙවන ගොනුවකට භාවිතා කර දෙවන ගොනුව මුල් පිටපතට වඩා ගෙනයාමට වඩා එය මන්දගාමී බව පෙනේ.
උදා
sed -i '/pattern/d' filename      හෝ
grep -v "pattern" filename > filename2; mv filename2 filenameපළමු විධානය කෙසේ හෝ මගේ යන්ත්රයට 3 ගුණයක් ගත වේ.
sed '/pattern/d' filename > filename2; mv filename2 filename
                    GNU සමඟ එය කිරීමට පහසුම ක්රමය sed:
sed --in-place '/some string here/d' yourfile-rනැතිනම් -E, විකල්පය උත්සාහ කරන්න (හෝ , ඔබේ අනුවාදය අනුව). මෙම regex metacharacters භාවිතය හැකියාව +, ?, {...}හා (...).
                    ඔබට භාවිතා කිරීම සලකා බැලිය හැකිය ex(එය සම්මත යුනික්ස් විධාන පාදක සංස්කාරකයකි):
ex +g/match/d -cwq fileකොහේද:
+ලබා දී ඇති Ex විධානය ( man ex) -cක්රියාත්මක කරන ආකාරයටම wq(ලිවීම සහ ඉවත් වීම)g/match/d- ලබා දී ඇති රේඛා මකා දැමීමට Ex විධානය match, බලන්න: g හි බලයඉහත උදාහරණයේ-ස්ථානය ගොනුව මෙම පරිදි සංස්කරණය සඳහා POSIX-අනුකූල ක්රමයක් වේ Unix.SE තැපැල් හා සඳහා POSIX පිරිවිතරex .
මෙහි ඇති වෙනස sedඑයයි:
sedයනු එස් tream ED itor, ගොනු කර්තෘ නොවේ. BashFAQ
ඔබ විසින් කළ නොහැකි කේතයක් භුක්ති විඳින්නේ නැත්නම්, I / O පොදු කාර්ය සහ වෙනත් නරක අතුරු ආබාධ. එබැවින් මූලික වශයෙන් සමහර පරාමිතීන් (ස්ථානයේ / වැනි -i) සම්මත නොවන FreeBSD දිගු වන අතර ඒවා වෙනත් මෙහෙයුම් පද්ධතිවල නොතිබිය හැකිය.
man exඑය මට මිනිසා දෙන vim, එය පෙනේ ex... මම අදහස් සඳහා ආදර්ශය කාරක රීති අයිතිය බව තේරුම් නම් විම් කොටසක් matchවේ vimregex.com POSIX හා PCRE රස සමාන නමුත් වෙනස් වන?
                    මම මැක් සමඟ මේ සමඟ පොරබදමින් සිටියෙමි. ප්ලස්, විචල්ය ප්රතිස්ථාපනය භාවිතයෙන් මට එය කිරීමට අවශ්ය විය.
එබැවින් මම භාවිතා කළෙමි:
sed -i '' "/$pattern/d" $file
එහිදී $fileඔබගේ පහසුව තකා මෙහි අවශ්ය හා කරනු ලබන ගොනුව $patternමකාදැමීමේ ගැලපෙන කිරීමට රටාව වේ.
මම ''මෙම අදහස් දැක්වීමෙන් තෝරා ගත්තා .
මෙහි සටහන් දේ භාවිතා කිරීම , උද්ධෘත පාඨ තුළ "/$pattern/d". අපි තනි උපුටා දැක්වීම් භාවිතා කරන විට විචල්යය ක්රියා නොකරනු ඇත.
sedහට පසුව පරාමිතියක් අවශ්ය වේ -i, එබැවින් ඔබට උපස්ථයක් අවශ්ය නොවන්නේ නම්, ඔබට තවමත් හිස් නූලක් එක් කළ යුතුය:-i ''
                    sed -i "/$pattern/d" $file. ඔබගේ පිළිතුරට ස්තූතියි.
                    මම ආසන්න වශයෙන් පේළි 345 000 ක් අඩංගු ගොනුවක් සහිත කුඩා මිණුම් ලකුණක් සාදා ඇත. සමග මාර්ගය grepවඩා 15 ගුනයක වේගයකින් බව පෙනේ sedමෙම නඩුවේ ක්රමය.
LC_ALL = C සැකසුම සමඟ සහ නැතිව මම උත්සාහ කර ඇත, එය කාලය සැලකිය යුතු ලෙස වෙනස් කරන බවක් නොපෙනේ. සෙවුම් දාමය (CDGA_00004.pdbqt.gz.tar) ගොනුවේ මැද කොතැනක හෝ තිබේ.
මෙන්න විධාන සහ වේලාවන්:
time sed -i "/CDGA_00004.pdbqt.gz.tar/d" /tmp/input.txt
real    0m0.711s
user    0m0.179s
sys     0m0.530s
time perl -ni -e 'print unless /CDGA_00004.pdbqt.gz.tar/' /tmp/input.txt
real    0m0.105s
user    0m0.088s
sys     0m0.016s
time (grep -v CDGA_00004.pdbqt.gz.tar /tmp/input.txt > /tmp/input.tmp; mv /tmp/input.tmp /tmp/input.txt )
real    0m0.046s
user    0m0.014s
sys     0m0.019sඔබට මෙයද භාවිතා කළ හැකිය:
 grep -v 'pattern' filenameමෙන්න -vමුද්රණය කරන්නේ ඔබේ රටාව හැරෙන්නට පමණි (එයින් අදහස් වන්නේ ප්රතිලෝම ගැලපීම).
grepඔබ සමඟ ප්රති result ලයක් වැනි ස්ථානයක් ලබා ගැනීමට මෙය කළ හැකිය:
echo "$(grep -v "pattern" filename)" >filenamebashෂෙල් එකට පමණක් හෝ ඊට සමාන (නොවේ tcsh) පමණි.
                    perl -i    -nle'/regexp/||print' file1 file2 file3
perl -i.bk -nle'/regexp/||print' file1 file2 file3පළමු විධානය මඟින් ගොනුව (ය) ඇතුලත (-i) සංස්කරණය කරයි.
දෙවන විධානය එකම දේ කරන නමුත් .bk ගොනු නම් වලට එකතු කිරීමෙන් මුල් ගොනුවේ (ය) පිටපතක් හෝ උපස්ථයක් තබා ගනී (.bk ඕනෑම දෙයකට වෙනස් කළ හැකිය).
යමෙකුට හරියටම නූල් ගැලපීම් සඳහා එය කිරීමට අවශ්ය නම්, ඔබට -wධජය grep - w ලෙස භාවිතා කළ හැකිය . එනම්, උදාහරණයක් ලෙස ඔබට අංක 11 ඇති පේළි මකා දැමීමට අවශ්ය නම්, නමුත් අංක 111 සමඟ පේළි තබා ගන්න:
-bash-4.1$ head file
1
11
111
-bash-4.1$ grep -v "11" file
1
-bash-4.1$ grep -w -v "11" file
1
111-fඔබට එකවර නිශ්චිත රටා කිහිපයක් බැහැර කිරීමට අවශ්ය නම් එය ධජය සමඟ ක්රියා කරයි . "අසාදු ලේඛනය" යනු "ගොනුව" වෙතින් මකා දැමීමට අවශ්ය එක් එක් පේළියේ රටා කිහිපයක් සහිත ගොනුවක් නම්:
grep -w -v -f blacklist file-w, --word-regexp  Select  only  those  lines  containing  matches that form whole words.එදිරිව-x, --line-regexp Select only those matches that exactly match the whole line.  For a regular expression pattern, this is like parenthesizing the pattern and then surrounding it with ^ and $.
                    cat filename | grep -v "pattern" > filename.1
mv filename.1 filenameප්රතිකාර කළ පෙළ කොන්සෝලය තුළ පෙන්වීමට
cat filename | sed '/text to remove/d' ප්රතිකාර කළ පෙළ ගොනුවකට සුරැකීමට
cat filename | sed '/text to remove/d' > newfileපවතින පෙළ ගොනුවක් එකතු කිරීමට
cat filename | sed '/text to remove/d' >> newfileදැනටමත් ප්රතිකාර කළ පෙළට ප්රතිකාර කිරීම සඳහා, මෙම අවස්ථාවේ දී ඉවත් කර ඇති දේවල තවත් පේළි ඉවත් කරන්න
cat filename | sed '/text to remove/d' | sed '/remove this too/d' | moreමෙම | moreවරකට එක පිටුවේ කුට්ටි පෙළ පෙන්නුම් කරනු ඇත.
ඔබ හොඳ පැරණි භාවිතා කළ හැකිය edකිරීමට සමාන ආකාරයකට ගොනුව සංස්කරණය කිරීමට පිළිතුර බඹුන් ex. මෙම නඩුවේ ඇති විශාල වෙනස edනම්, එහි විධානයන් සම්මත ආදානය හරහා ගෙන යාම මිස විධාන රේඛා තර්ක ලෙස නොවේ ex. එය ස්ක්රිප්ට් එකක භාවිතා කරන විට, එයට අනුගත විය හැකි සාමාන්ය ක්රමය නම් printfඑයට විධාන පයිප්ප භාවිතා කිරීමයි:
printf "%s\n" "g/pattern/d" w | ed -s filenameහෝ පාරම්පරිකය සමඟ:
ed -s filename <<EOF
g/pattern/d
w
EOF