kubectl get nodes -o name gives me the output
node/k8s-control.anything
node/k8s-worker1.anything
I need to get only
control
worker1
as output and want to iterate through these elements
for elm in $(kubectl get nodes -o name); do echo "$elm" >> file.txt; done
So the question is how to get the string between node/k8s- and .anything and iterate these in the for loop.
CodePudding user response:
You can for example use cut twice, first to get a part after - and
then to get a part before .:
for elm in $(kubectl get nodes -o name | cut -d- -f2 | cut -d. -f1); do echo "$elm" >> file.txt; done
CodePudding user response:
With awk
kubectl get nodes -o name | awk -F'[.-]' '{print $2}' > file.txt
CodePudding user response:
You can use grep with -oP filter to extract the desired substring. Later, you can use > operator to redirect to the file.txt.
kubectl get nodes -o name|grep -oP 'node.*?-\K[^.] '
control
worker1
CodePudding user response:
Another option might be bash parameter expansion:
while read -r line ; do line="${line#*-}"; line="${line%.*}"; printf "%s\n" "$line" ; done < <(kubectl get nodes -o name)
