I recently stumbled upon https://cmdchallenge.com which sort of tests your command line knowledge and comfortability. You have to basically solve all the challenges in a single line of bash. It is pretty simple and fun. You should give it a try before checking the solutions.
Also, you can checkout the creator's solutions here.
hello_world/
# Print "hello world". # Hint: There are many ways to print text on # the command line, one way is with the 'echo' # command. # # Try it below and good luck! #Solution:
echo "hello world"
current_working_directory/
# Print the current working directory. #Solution:
pwd
list_files/
# List all of the files in the current # directory, one file per line. #Solution:
ls -1
last_lines/
# Print the last 5 lines of "access.log". #Solution:
tail -5 access.log
find_string_in_a_file/
# There is a file named "access.log" in the # current working directory. Print all lines # in this file that contains the string "GET". #Solution:
grep GET access.log
search_for_files_containing_string/
# Print all files, one per line that contain # the string "500". #Solution:
grep -rl * -e 500
search_for_files_by_extension/
# Print the relative file paths, one path # per line for all files that start with # "access.log" in the current directory. #Solution:
find . -name "access.log*"
search_for_string_in_files_recursive/
# Print all matching lines (without the filename # or the file path) in all files under the current # directory that start with "access.log" that # contain the string "500". #Solution:
find . -name "access.log*" | xargs grep -h 500
extract_ip_addresses/
# Extract all IP addreses from files that # that start with "access.log" printing one # IP address per line. #Solution:
find . -name "access.log*" | xargs grep -Eo '^[^ ]+'
delete_files/
# Delete all of the files in this challenge # directory including all subdirectories and # their contents. #Solution:
find . -delete
count_files/
# Count the number of files in the current # working directory. Print the number of # files as a single integer. #Solution:
ls | wc -l
simple_sort/
# Print the contents of access.log # sorted. #Solution:
sort access.log
count_string_in_line/
# Print the number of lines # in access.log that contain the string # "GET". #Solution:
grep GET access.log | wc -l
split_on_a_char/
# The file split-me.txt contains a list of # numbers separated by a ';' character. # Split the numbers on the ';' character, # one number per line. #Solution:
cat split-me.txt | sed s/\;/\\n/g
print_number_sequence/
# Print the numbers 1 to 100 separated # by spaces. #Solution:
echo {1..100}
remove_files_with_extension/
# There are files in this challenge with # different file extensions. # Remove all files with the .doc extension # recursively in the current working directory. #Solution:
find . -name "*.doc" -delete
replace_text_in_files/
# This challenge has text files that contain # the phrase "challenges are difficult". Delete # this phrase recursively from all text files. #Solution:
find . -name "*.txt" -exec sed -i 's/challenges are difficult//g' {} +
sum_all_numbers/
# The file sum-me.txt have a list of numbers, # one per line. Print the sum of these numbers. #Solution:
cat sum-me.txt | xargs | sed -e 's/\ /+/g' | bc
just_the_files/
# Print all files in the current directory # recursively without the leading directory path. #Solution:
find . -type f -printf "%f\n"
remove_extensions_from_files/
# Remove the extension from all files in # the current directory recursively. #Solution: (note you cant use
find .
)
find `pwd` -type f -exec bash -c 'mv "$1" "${1%.*}"' - '{}' \;
replace_spaces_in_filenames/
# The files in this challenge contain spaces. # List all of the files in the current # directory but replace all spaces with a '.' # character. #Solution:
find . -type f -printf "%f\n" | xargs -0 -I {} echo {} | tr ' ' '.'
files_starting_with_a_number/
# There are a mix of files in this directory # that start with letters and numbers. Print # the filenames (just the filenames) of all # files that start with a number recursively # in the current directory. #Solution:
find . -name '[0-9]*' -type f -printf "%f\n"
print_nth_line/
# Print the 25th line of the file faces.txt #Solution:
sed '25q;d' faces.txt
remove_duplicate_lines/
# Print the file faces.txt, but only print the first instance of each # duplicate line, even if the duplicates don't appear next to each other. #Solution:
awk '!seen[$0]++' faces.txt
corrupted_text/
# You have a new challenge! # The following excerpt from War and Peace is saved to # the file 'war_and_peace.txt': # # She is betraying us! Russia alone must save Europe. # Our gracious sovereign recognizes his high vocation # and will be true to it. That is the one thing I have # faith in! Our good and wonderful sovereign has to # perform the noblest role on earth, and he is so virtuous # and noble that God will not forsake him. He will fulfill # his vocation and crush the hydra of revolution, which # has become more terrible than ever in the person of this # murderer and villain! # # The file however has been corrupted, there are random '!' # marks inserted throughout. Print the original text. #Solution: (Found this on hackernews)
< war_and_peace.txt tr -s '!' | sed 's/!\([a-z]\)/\1/g' | sed 's/!\( [a-z]\)/\1/g' | sed 's/!\.!/./g' | sed 's/ !/ /g'
Also, you can checkout the creator's solutions here.
No comments:
Post a Comment