This page is edited from the 1cmdfaq.txt faq-file contained in
my tscmd.zip
command line interface (CLI) collection. That zipped file has much
additional material, including a number of detached .cmd script
files. It is recommended that you also get the zipped version as a
companion.
Please see "
The Description and
the Index page" for the conditions of usage and other such
information.
114} How do I pick a file's lines that are three characters long?
Q: I have a text file with a list of around 900 names in it. I'd like
to be able to retrieve all the names that are three characters long.
The method is an adaptation of items
#26
and
#27
of this FAQ.
@echo off & setlocal enableextensions enabledelayedexpansion
for /f "delims=" %%a in ('type myfile.txt') do (
set name_=%%a
set charCount=0
for /l %%c in (0,1,255) do (
set si=!name_:~%%c,1!
if defined si set /a charCount+=1)
if !charCount! EQU 3 echo !name_!
)
endlocal & goto :EOF
This method cannot handle names with the "poison characters".
However, a much simpler and still an all-script solution is
findstr "^...$" "My test file.txt"
With
sed it would be
<"My test file.txt" sed -n "s/^...$/&/p"
Note the redirection formulation instead of using
sed -n "s/^...$/&/p" "My test file.txt"
which may fail depending on the SED port version LFN handling.
With
gawk
<"My test file.txt" gawk "{if(length()==3)printf\"%%s\n\",$0}"
What if you want all the names that are three or less characters
long?
findstr "^.$ ^..$ ^...$" "My test file.txt"