मुझे अपनी परियोजना में सभी लॉग इन करने की आवश्यकता है। मैं इस आदेश का उपयोग कर रहा हूँ कि:
grep -rnw $1 -e "Logger.[view]*;$" >> log.txt
यह लाइन लॉगर से युक्त सभी लाइनों को वापस कर देती है। [इनमें से एक कार्टर] परियोजना निर्देशिका "$1
" में निहित है सिवाय इसके कि कुछ पंक्तियाँ 2 या 3 पंक्तियों (IDE formating) पर लिखी गई हैं। इस मामले में मुझे केवल पहली पंक्ति मिलती है। मैं उस लॉग का पूरा पाठ प्राप्त करने के लिए क्या कर सकता हूं, यह जानते हुए कि एक लॉग लाइन हमेशा ");
" के साथ समाप्त होगी ऐसी रेखा का उदाहरण:
Logger.v(xxxxxxxxxxxxx
xxxxxxxxxxxxxxxx);
यहाँ मेरी स्क्रिप्ट है:
#!/bin/bash
echo "Hello Logger!
# get project path
echo "project directory is $1"
# get all project logs and store them into temporary file tmp.txt for processing
grep -rnw $1 -e "Logger.[view]" >> tmp.txt
echo "tmp.txt created successfully"
# remove package name from previous result and store result into log.txt
sed -r 's/.{52}//' tmp.txt >> log.txt
echo "log.txt created successfully"
Grep कमांड रिटर्न file_path / file_name : line_number : लाइन । मुझे यह आदेश मिला जो केवल लाइन लौटाता है, भले ही वह 2 या 3 लाइनों में लिखा हो, लेकिन बिना file_path file_name और के। line_number
sed -n '/Logger.[viewd]/{:start /;/!{N;b start};/Logger.[viewd]/p}' Main.java
क्या उन दो परिणामों को संयुक्त करने का एक तरीका है। उदाहरण :
/home/xxx/xxx/xxx/Main.java:97:Logger.i(xxxxxxxxxxxxx);
/home/xxx/xxx/xxx/Main.java:106:Logger.d(yyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyy);
2 जवाब
मुझे अपनी समस्या का हल मिल गया और यहाँ मेरा कोड है:
# get all project logs and store them into log.txt for processing
for i in $(find -name "*.java")
do
echo >> log.txt
echo "**************** file $i ********************************" >> log.txt
echo >> log.txt
grep -rnw Logger.[viewd] $i | while read -r line ; do
# remove breaklines from first line to avoid having bad results
line="$(echo $line | sed $'s/\r//')"
# if first line ends with ");" print it to log file
if [[ ${line: -2} == ");" ]]; then
echo $line >> log.txt
# else get next line also
else
# get second line number
line_number="$(echo "$line" | cut -d : -f1)"
next_line_number=$((line_number+1))
# get second line
next_line=$(sed "${next_line_number}q;d" $i | sed -e 's/^[ \t]*//')
# concatenate first line & second line
line="$line $next_line"
# print resulting line to log file
echo $line >> log.txt
fi
done
मुझे लगता है कि यह एक ब्रेक लाइन समस्या है। निम्न पंक्तियों द्वारा grep -rnw $1 -e "Logger.[view]" >> tmp.txt
को बदलने का प्रयास करें:
for i in `ls $1`;
do
cat $1/$i | tr '\n' ' ' | grep -rnw -e "Logger.[view]" >> tmp.txt
done
यहां, tr '\n' ' '
ब्रेक लाइन को एक साधारण स्थान से बदलें।
संबंधित सवाल
नए सवाल
linux
LINUX QUESTIONS को संबंधित होना चाहिए। इस टैग का उपयोग केवल तभी करें जब आपका प्रश्न लिनक्स एपीआई या लिनक्स-विशिष्ट व्यवहार का उपयोग करके प्रोग्रामिंग से संबंधित हो, न कि केवल इसलिए कि आप लिनक्स पर अपने कोड को चलाने के लिए होते हैं। यदि आपको लिनक्स समर्थन की आवश्यकता है तो आप https://unix.stackexchange.com या विशिष्ट लिनक्स वितरण की स्टैक एक्सचेंज साइट जैसे https://askubuntu.com या https://elementaryos.stackexchange.com/ की कोशिश कर सकते हैं