At xFusionCorp Industries, the Stratos Datacenter houses a jump host server that stores template XML files essential for the Nautilus application. Prior to their use, these files need to be populated with valid data. As part of regular maintenance, the system administration team utilizes various string and file manipulation commands to prepare these templates.
Your task is to substitute all occurrences of the string Text with Echo-Location within the XML file located at /root/nautilus.xml on the jump host server.
Solution
Step 1: Connect to the Jump Host Server
ssh thor@jump-host
# Password: mjolnir123
Step 2: Switch to root
sudo su -
# Password: mjolnir123
Step 3: Verify the file exists and check its content
# Check if file exists
ls -la /root/nautilus.xml
# View the file content (optional)
cat /root/nautilus.xml
Step 4: Substitute all occurrences of "Text" with "Echo-Location"
Method 1: Using sed (Recommended)
sed -i 's/Text/Echo-Location/g' /root/nautilus.xml
Command breakdown:
-
sed: Stream editor for filtering and transforming text -
-i: Edit files in-place (without backup) -
s/Text/Echo-Location/g: Substitute all occurrences-
s: Substitute command -
Text: Pattern to search for -
Echo-Location: Replacement string -
g: Global (replace all occurrences, not just the first)
-
Method 2: Using sed with backup (Safer)
sed -i.bak 's/Text/Echo-Location/g' /root/nautilus.xml
This creates a backup file nautilus.xml.bak before making changes.
Step 5: Verify the changes
# View the modified file
cat /root/nautilus.xml
# Check for any remaining "Text" strings
grep -n "Text" /root/nautilus.xml
# Check for "Echo-Location" strings
grep -n "Echo-Location" /root/nautilus.xml
# Count occurrences replaced
grep -o "Echo-Location" /root/nautilus.xml | wc -l
Complete One-Line Commands
From jump host directly (as root):
sed -i 's/Text/Echo-Location/g' /root/nautilus.xml && echo "✓ Substitution complete" && grep -c "Echo-Location" /root/nautilus.xml
From jump host with sudo:
sudo sed -i 's/Text/Echo-Location/g' /root/nautilus.xml && echo "✓ Substitution complete"
Step-by-Step Interactive Commands
# Connect to jump host
ssh thor@jump-host
# Password: mjolnir123
# Become root
sudo su -
# Password: mjolnir123
# Check the original file
echo "=== Original file content ==="
cat /root/nautilus.xml
# Create a backup (recommended)
cp /root/nautilus.xml /root/nautilus.xml.backup
echo "✓ Backup created at /root/nautilus.xml.backup"
# Perform the substitution
echo "=== Performing substitution ==="
sed -i 's/Text/Echo-Location/g' /root/nautilus.xml
echo "✓ Substitution complete"
# Verify the changes
echo "=== File after substitution ==="
cat /root/nautilus.xml
# Check for any remaining "Text" strings
echo "=== Checking for remaining 'Text' strings ==="
grep -n "Text" /root/nautilus.xml || echo "✓ No 'Text' strings found"
# Count the replacements
echo "=== Count of 'Echo-Location' occurrences ==="
grep -o "Echo-Location" /root/nautilus.xml | wc -l
# Exit
exit
exit
Alternative Commands
1. Using sed with different delimiters (if text contains slashes)
sed -i 's|Text|Echo-Location|g' /root/nautilus.xml
2. Using awk
awk '{gsub(/Text/, "Echo-Location"); print}' /root/nautilus.xml > /tmp/nautilus.xml.tmp && mv /tmp/nautilus.xml.tmp /root/nautilus.xml
3. Using perl (if available)
perl -pi -e 's/Text/Echo-Location/g' /root/nautilus.xml
4. Using sed with case-insensitive substitution
sed -i 's/Text/Echo-Location/gi' /root/nautilus.xml
# i = case-insensitive
5. Using sed to replace only whole words (not partial)
sed -i 's/\bText\b/Echo-Location/g' /root/nautilus.xml
# \b matches word boundaries
Verification Commands
Run these to confirm the substitution worked correctly:
# 1. Check if file exists
ls -la /root/nautilus.xml
# 2. View the entire file
cat /root/nautilus.xml
# 3. Check for "Text" occurrences (should be 0)
grep -i "Text" /root/nautilus.xml
# 4. Check for "Echo-Location" occurrences
grep -o "Echo-Location" /root/nautilus.xml | wc -l
# 5. Show lines containing the replacement
grep -n "Echo-Location" /root/nautilus.xml
# 6. Verify with diff (if backup exists)
diff /root/nautilus.xml.backup /root/nautilus.xml
# 7. Check file permissions (ensure unchanged)
ls -la /root/nautilus.xml
# 8. Validate XML syntax (if xmllint is available)
xmllint --noout /root/nautilus.xml && echo "✓ XML is valid"
Example Output
[root@jump-host ~]# cat /root/nautilus.xml
<config>
<setting name="Text">Value1</setting>
<setting name="AnotherText">Value2</setting>
<Text>This is a Text element</Text>
<description>Replace Text with something else</description>
</config>
[root@jump-host ~]# sed -i 's/Text/Echo-Location/g' /root/nautilus.xml
[root@jump-host ~]# cat /root/nautilus.xml
<config>
<setting name="Echo-Location">Value1</setting>
<setting name="AnotherEcho-Location">Value2</setting>
<Echo-Location>This is a Echo-Location element</Echo-Location>
<description>Replace Echo-Location with something else</description>
</config>
[root@jump-host ~]# grep -c "Echo-Location" /root/nautilus.xml
4
[root@jump-host ~]# grep -c "Text" /root/nautilus.xml
0
Advanced Options
Create backup and replace with verbose output
sed -i.bak 's/Text/Echo-Location/g' /root/nautilus.xml && \
echo "✓ Substitution complete" && \
echo "Occurrences replaced: $(grep -o 'Echo-Location' /root/nautilus.xml | wc -l)" && \
echo "Backup saved as: /root/nautilus.xml.bak"
Replace only in specific lines (e.g., lines containing "setting")
sed -i '/setting/s/Text/Echo-Location/g' /root/nautilus.xml
Replace with confirmation (interactive)
sed -i 's/Text/Echo-Location/g' /root/nautilus.xml && \
echo "Changes made. Review the file: cat /root/nautilus.xml"
Replace and show changes (without modifying)
# Preview changes without applying
sed 's/Text/Echo-Location/g' /root/nautilus.xml | diff /root/nautilus.xml -
Troubleshooting
- "Permission denied":
# Use sudo
sudo sed -i 's/Text/Echo-Location/g' /root/nautilus.xml
# Or become root
sudo su -
- "No such file or directory":
# Check if file exists
ls -la /root/nautilus.xml
# If not, check other locations
find / -name "nautilus.xml" 2>/dev/null
- "sed: -e expression #1" error:
# Use different delimiters if the text contains slashes
sed -i 's|Text|Echo-Location|g' /root/nautilus.xml
- Need to preserve XML formatting:
# Use xmlstarlet for XML-specific operations (if available)
xmlstarlet ed -u "//*[contains(text(),'Text')]" -v "Echo-Location" /root/nautilus.xml
- Case-insensitive replacement:
sed -i 's/Text/Echo-Location/gi' /root/nautilus.xml
Complete Solution Summary
The task has been completed on the Jump Host Server:
- ✅ Connected to jump host and switched to root
- ✅ Verified
/root/nautilus.xmlexists - ✅ All occurrences of "Text" replaced with "Echo-Location"
- ✅ Used
sed -ifor in-place editing - ✅ Verified no "Text" strings remain
- ✅ Confirmed "Echo-Location" strings are present
- ✅ Optional backup file created
The XML template file is now properly populated with the required string substitutions and ready for use in the Nautilus application.
Top comments (0)